请教各位,在 pandas 中 groupby 技术,如何给原始数据添加多级索引的 key?

2018-05-12 07:48:11 +08:00
 darktone

有一个形如以下的学生成绩表,求男同学和女同学的平均成绩:

''' frame=pd.DataFrame({'姓名':['甲','乙','丙','丁','戊','己','庚'], '成绩':range(70,0,-10), '性别':['男','男','男','女','女','女','女'], 'd':[0,1,2,0,1,2,3] }) '''

其结构如下: d 姓名 性别 成绩 0 0 甲 男 70 1 1 乙 男 60 2 2 丙 男 50 3 0 丁 女 40 4 1 戊 女 30 5 2 己 女 20 6 3 庚 女 10

''' #转换成多级索引

frame2=frame.set_index(['性别','d'])

#以性别分组求平均

frame2.groupby('性别').mean() '''

结果如下

Out[60]: 成绩 性别
女 25 男 60

以上步骤基本会做了,但是………………

我的疑惑是,如果原始数据中没有 d 列,仅仅是一个最常见的学生成绩表:

''' frame=pd.DataFrame({'姓名':['甲','乙','丙','丁','戊','己','庚'], '成绩':range(70,0,-10), '性别':['男','男','男','女','女','女','女'], }) '''

这种情况,如何添加 d 列,如果成绩表数据较多,总不可能人工去数数添加吧?

初学,我的理解是没有多级索引 key,就没办法使用 groupby。

如何给没有多级索引 key 的原始数据,添加上去呢??

2442 次点击
所在节点    Python
3 条回复
enenaaa
2018-05-12 17:22:31 +08:00
groupby 跟索引没关系。
dengshuang
2018-05-13 20:55:12 +08:00
groupby 聚合数据 比如:['甲','乙','丙','丁','戊','己','庚'] 6 位同学,3 男 3 女 ,你想看男的都有谁,data.groupby['男']
crsroy
2018-05-16 07:39:54 +08:00
import pandas as pd

df = pd.DataFrame({'姓名':['甲','乙','丙','丁','戊','己','庚'], '成绩':range(70,0,-10), '性别':['男','男','男','女','女','女','女'], 'd':[0,1,2,0,1,2,3] })

#假设原数据没有'd'列
df2 = df[['姓名','成绩','性别']]
#直接用性别分组可以得到分组统计
grouped = df2.groupby('性别')
print(grouped.mean())
#使用 rank 函数得到性别分组排号
df2['d'] = df2['成绩'].groupby(df2['性别']).rank(ascending = 0)
print(df2)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/454217

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX