我有一个数据框,我想要选择所有
行df = A B C D
'a' 1 1 1
'b' 1 2 1
'c' 1 1 1
'a' 1 2 2
'a' 2 2 2
'b' 1 2 2
我想得到一列中的值是该组的最大值的行。因此,对于上面的示例,如果我想分组为' A'和' B'并获得' C'
中具有最大价值的行df = A B C D
'a' 1 2 2
'b' 1 2 2
'c' 1 1 1
'a' 2 2 2
我知道我想使用groupby
,但我不确定在那之后该怎么做。
答案 0 :(得分:1)
最简单的方法是使用转换功能。这基本上允许您对保留与原始数据帧相同索引的组应用函数。在这种情况下,您可以看到从转换中获得以下内容
In [13]: df.groupby(['A', 'B'])['C'].transform(max)
Out[13]:
0 2
1 2
2 1
3 2
4 2
5 2
Name: C, dtype: int64
它与原始数据帧具有完全相同的索引,因此您可以使用它来创建过滤器。
df[df['C'] == df.groupby(['A', 'B'])['C'].transform(max)]
Out[11]:
A B C D
1 b 1 2 1
2 c 1 1 1
3 a 1 2 2
4 a 2 2 2
5 b 1 2 2
有关详细信息,请参阅the pandas groupby documentation,这非常棒。