python - 如何在熊猫中聚合每组的两个最大值?
问题描述
我正在浏览这个链接:Return top N maximum values per group using pandas
并找到了多种方法来查找每组的 topN 值。
但是,我更喜欢带有 agg 函数的字典方法,并且想知道是否可以获得与以下问题的字典方法等效的方法?
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': [1, 1, 1, 2, 2],
'B': [1, 1, 2, 2, 1],
'C': [10, 20, 30, 40, 50],
'D': ['X', 'Y', 'X', 'Y', 'Y']})
print(df)
A B C D
0 1 1 10 X
1 1 1 20 Y
2 1 2 30 X
3 2 2 40 Y
4 2 1 50 Y
我可以做这个:
df1 = df.groupby(['A'])['C'].nlargest(2).droplevel(-1).reset_index()
print(df1)
A C
0 1 30
1 1 20
2 2 50
3 2 40
# also this
df1 = df.sort_values('C', ascending=False).groupby('A', sort=False).head(2)
print(df1)
# also this
df.set_index('C').groupby('A')['B'].nlargest(2).reset_index()
必需的
df.groupby('A',as_index=False).agg(
{'C': lambda ser: ser.nlargest(2) # something like this
})
可以在这里使用字典吗?
解决方案
如果你想从 C 中获取像 A: 2 top values这样的字典,你可以运行:
df.groupby(['A'])['C'].apply(lambda x:
x.nlargest(2).tolist()).to_dict()
对于您的 DataFrame,结果是:
{1: [30, 20], 2: [50, 40]}
推荐阅读
- sh - Shell脚本如何在变量内传递带有空格的参数
- typescript - 为什么打字稿不能推断表达式的类型
- android - 替换后,我无法将抽屉导航菜单附加到 android 中的汉堡菜单 - 使用 kotlin
- python - Matplotlib show() 和 savefig() 不一致
- ios - URLComponents 初始化失败
- python - TensorFlow 错误(CUBLAS_STATUS_EXECUTION_FAILED)
- swift - 通过 isActive 的 NavigationLink 推送被立即解除
- python - 我的烧瓶应用程序登录无法正常工作
- python - 如何使用 tensorflow 解决 reset_default_graph() 错误?
- docker - OpenAM:Web 策略代理登录到 OpenAM 失败