2017-02-13 73 views
2

我有一个数据帧,我想选择所有的行是如何在一列中选择中的行数据框具有最大值

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,但我在那之后不知道该怎么做。

回答

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,这是非常好的。

相关问题