如何获取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行样本
答案 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