rdh*_*dh9 4 python aggregate pandas
示例数据框:
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['group1', 'group2', 'group3'] * 2,
'B': rand.rand(6),
'C': rand.rand(6),
'D': rand.rand(6)})
Run Code Online (Sandbox Code Playgroud)
打印df
A B C D
0 group1 0.417022 0.186260 0.204452
1 group2 0.720324 0.345561 0.878117
2 group3 0.000114 0.396767 0.027388
3 group1 0.302333 0.538817 0.670468
4 group2 0.146756 0.419195 0.417305
5 group3 0.092339 0.685220 0.558690
Run Code Online (Sandbox Code Playgroud)
分组依据A列
group = df.groupby('A')
Run Code Online (Sandbox Code Playgroud)
使用agg返回每个组的最大值
max1 = group['B'].agg({'max' : np.max})
print max1
max
A
group1 0.417022
group2 0.720324
group3 0.092339
Run Code Online (Sandbox Code Playgroud)
但是我想保留(或取回)其他列C和D中的适当数据。这将是包含最大值的行的剩余数据。因此,返回值应为:
A B C D
group1 0.417022 0.186260 0.204452
group2 0.720324 0.345561 0.878117
group3 0.092339 0.685220 0.558690
Run Code Online (Sandbox Code Playgroud)
有人可以显示如何执行此操作吗?任何帮助表示赞赏。
分两个阶段:首先查找索引,然后查找所有行。
idx = df.groupby('A').apply(lambda x: x['B'].argmax())
idx
Out[362]:
A
group1 0
group2 1
group3 5
df.loc[idx]
Out[364]:
A B C D
0 group1 0.417022 0.186260 0.204452
1 group2 0.720324 0.345561 0.878117
5 group3 0.092339 0.685220 0.558690
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |