我有一个这样的熊猫数据框:
索引 | 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 中运行的解决方案会很高兴。
答案 0 :(得分:0)
您需要先将值转换为数字:
df['occur'] = df['occur'].astype(int)
df_short = data.loc[df.groupby(['dmc1','par'])['occur'].idxmax()]