求解 pandas groupby 的标签问题,谢谢!^_^

2016-10-29 23:21:36 +08:00
 kingmo888
idx A B C D
n1 a n1 0.08235683979623196 0.05382651911109722
n2 a n2 -0.5753742388125477 -1.274828987062829
n3 c n3 -1.4215891862728542 -1.5249012616692992
n4 b n4 2.597861476435896 -0.022156711083823347
n5 b n5 0.554609527394234 -0.41314768348864467
n6 c n6 0.515677716749852 -1.6778597999504492
n7 c n7 -1.6537892579863014 -1.4180345858887689
n8 c n8 -0.6986637088054982 0.4363171785879798



假设我有如上一个 df 表,分为 A,B,C,D 共 4 列。
我想以列 A 为分组,求列 C 各组内的最大值。**同时知道这个最大值对应的是哪个 index**后一个要求怎么实现哈?


df['C'].groupby(df['A']).max()
结果只是:
A
a 0.082357
b 2.597861
c 0.515678
Name: C, dtype: float64
获取不到他们的 index
3269 次点击
所在节点    Python
7 条回复
zjuhwc
2016-10-30 00:06:33 +08:00
princelai
2016-10-30 00:58:10 +08:00
group 前先 reset_index,比如这列就叫 index ,最后一步加上['index']
billgreen1
2016-10-30 08:16:59 +08:00
没那么麻烦
df.groupby('A')['C'].agg([max, np.argmax])
kingmo888
2016-10-30 09:08:40 +08:00
@billgreen1 这个好!太赞了。查询了一下,一个求最大值,一个求最大值下标。
kingmo888
2016-10-30 09:09:10 +08:00
@princelai 其实 B 列就跟 index 一致。但是不是很明白你说的。那样求出来有问题。
wnduan
2016-10-30 10:27:55 +08:00
因为你的 'B' 列和 'index' 一样,所以 df.groupby(['A']).max() 就行,这样 'C' 和 'D' 的最大值都有。如果只要 'C' 的话也可以 df[['A', 'B', 'C']].groupby(['A']).max()
hastelloy
2016-11-01 06:29:11 +08:00
idxmax 为您服务

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

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

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

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

© 2021 V2EX