如何在熊猫数据框中的组中找到最大值的行

时间:2021-03-19 10:36:32

标签: python pandas dataframe group-by

我有一个这样的熊猫数据框:

<头>
索引 dmc1 标准 虚拟 发生
0 d1 p1 1
1 d1 p2 b 1
2 d1 p3 c 1
3 d1 p3 d 2
4 d2 p1 e 1
5 d2 p2 f 1
6 d2 p2 g 2
7 d2 p3 h 1
df = pd.DataFrame({'dmc1': ['d1', 'd1', 'd1', 'd1','d2', 'd2', 'd2', 'd2'],
            'par': ['p1', 'p2', 'p3', 'p3', 'p1', 'p2', 'p2', 'p3'],
            'dummy': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'],
            'occur': ['1', '1', '1', '2', '1', '1', '2', '1']})

我想按“dmc1”和“par”对这个表进行分组,并在每个组中找到“occur”值最高的成员,并只保留那些行。所以我期待这样的结果:

<头>
索引 dmc1 标准 虚拟 发生
0 d1 p1 1
0 d1 p2 b 1
0 d1 p3 d 2
0 d2 p1 e 1
0 d2 p2 g 2
0 d2 p3 h 1

我使用的是 python 3.6.10

我多次找到此解决方案:

idx = df.groupby(['dmc1','par'])['occur'].idxmax()

df_short = data.loc[idx]

但就我而言,它引发了一个错误: AttributeError: 'SeriesGroupBy' 对象没有属性 'idmax'

我还发现了使用“idxmax()”而不是“idmax()”的提示,但这也引发了一个错误: 引发 ValueError

如果有一个在 python 3.6 中运行的解决方案会很高兴。

1 个答案:

答案 0 :(得分:0)

您需要先将值转换为数字:

df['occur'] = df['occur'].astype(int)
df_short = data.loc[df.groupby(['dmc1','par'])['occur'].idxmax()]
相关问题