python - 从 pandas groupby 获得独特的价值记录
问题描述
我有一个df:
df = pd.DataFrame({'type':['a', 'a', 'b', 'b'],
'id':[1134, 5321, 2444, 2444],
'amt':[45, 55, 13, 14]})
我正在尝试获取 amt 列的计数、总和、平均值以及唯一 ID。
df.groupby('type')['amt'].agg(['count', 'sum', np.mean])
count sum mean
type
a 2 100 50.0
b 2 27 13.5
现在我正在尝试为每个分组获取不同的 ID。如果我添加id
到列中以拉出,则产生
id amt
count sum mean count sum mean
type
a 2 6455 3227.5 2 100 50.0
b 2 4888 2444.0 2 27 13.5
这是我不想要的。我想要第一个表,但另一列的计数不同。我也尝试了以下方法,但无济于事。
df.groupby('type')['amt'].agg(['count', 'sum', np.mean, lambda x: len(np.unique(x['id']))])
预期输出:
count sum mean unique_id
type
a 2 100 50.0 2
b 2 27 13.5 1
解决方案
agg
与 一起使用nunique
。您不必将列表传递给agg
,它也需要一个字典映射,这就是这里需要的。
res = df.groupby('type').agg({'amt': ['count', 'sum', 'mean'], 'id': 'nunique'})
amt id
count sum mean nunique
type
a 2 100 50.0 2
b 2 27 13.5 1
如果你想展平列(我个人认为你应该留下它们,更容易索引):
res.columns = res.columns.get_level_values(1)
print(res)
count sum mean nunique
type
a 2 100 50.0 2
b 2 27 13.5 1
推荐阅读
- python - 为什么 chrome 在错误的子域上设置 cookie?
- mysql - 一个sql查询的结果集可以用在另一个吗?
- c# - 无法使用 itextsharp 将希伯来语 HTML 文件解析为 pdf
- jquery - 将应用程序迁移到 Angular 6:但是在运行 npm run build --prod 时出现错误。但是命令 npm run build --env=prod 运行成功
- r - 在分组数据框中使用过滤器和样本
- dart - 如何在颤动中处理 Firebase Auth 未处理的异常?
- php - 如何在functions.php中正确包含PHPmailer(Wordpress)
- vaadin8 - 不使用 fluent api 创建网格列
- python - Python - 捕获多维字典的一条腿并更改为熊猫数据框
- reactjs - 如何通过 HOC 显示加载器?