2017-02-13 66 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,這是非常好的。

相關問題