Groupby返回完整行的最大值

时间:2015-12-11 10:56:17

标签: python pandas

如何获取groupby relsult的完整数据行?

df
   a   b   c  d   e
0  a  25  12  1  20
1  a  15   1  1   1
2  b  12   1  1   1
3  n  25   2  3   3

In [4]: df = pd.read_clipboard()

In [5]: df.groupby('a')['b'].max()
Out[5]: 
a
a    25
b    12
n    25
Name: b, dtype: int64

如何获得完整的行?

a   b   c  d   e
a  25  12  1  20
b  12   1  1   1
n  25   2  3   3

我尝试过滤但是df[df.e == df.groupby('a')['b'].max()],但尺寸不同:(

原始数据:

0          1       2        3     4        5     6      7       8    9   
EVE00101  Trial  DRY RUN  PASS  1610071  1610071  Y  20140808  NaN  29   

10        11                12           13                 14  
FF1  ./ff1.sh  Event Validation  Hive Tables  2015-11-30 9:40:34 

Groupby([1,7])[14].max()给出了结果,但在分组系列中,1和7作为索引,我想要相应的列。它是15,000行数据并提供了1行样本

3 个答案:

答案 0 :(得分:3)

您可以使用argmax()

In [287]: df.groupby('a', as_index=False).apply(lambda x: x.loc[x.b.argmax(),])
Out[287]:
   a   b   c  d   e
0  a  25  12  1  20
1  b  12   1  1   1
2  n  25   2  3   3

这种方式即使b不是最大的也是有效的。

答案 1 :(得分:2)

我会覆盖' b'使用transform列,然后删除副本' a'使用drop_duplicates

In [331]:
df['b'] = df.groupby('a')['b'].transform('max')
df

Out[331]:
   a   b   c  d   e
0  a  25  12  1  20
1  a  25   1  1   1
2  b  12   1  1   1
3  n  25   2  3   3

In [332]:    
df.drop_duplicates('a')

Out[332]:
   a   b   c  d   e
0  a  25  12  1  20
2  b  12   1  1   1
3  n  25   2  3   3

答案 2 :(得分:1)

您可能不会使用['b']进行切片,然后您将打印整个数据框:

In [41]: df.groupby('a').max()
Out[41]:
    b   c  d   e
a
a  25  12  1  20
b  12   1  1   1
n  25   2  3   3