python - 返回 groupby pandas 之后的所有行(即不是减少的行数,即组键的唯一值)
问题描述
教程中的以下代码产生以下结果:
代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : np.random.randn(8),
'D' : np.random.randn(8)})
print(df)
grouped = df.groupby('A').mean()
print(grouped)
结果:
A B C D
0 foo one -0.787410 -0.857863
1 bar one 0.140572 1.330183
2 foo two -0.770166 2.123528
3 bar three -0.965523 0.771663
4 foo two 0.215037 -0.597935
5 bar two -1.023839 -0.248445
6 foo one -1.377515 2.041921
7 foo three -0.314333 1.379423
C D
A
bar -0.616263 0.617800
foo -0.606877 0.817815
但是,我希望看到所有行,如下所示:
0 foo one -0.606877 0.817815
1 bar one -0.616263 0.617800
2 foo two -0.606877 0.817815
3 bar three -0.616263 0.617800
4 foo two -0.606877 0.817815
5 bar two -0.616263 0.617800
6 foo one -0.606877 0.817815
7 foo three -0.606877 0.817815
我也愿意使用任何其他图书馆。我只需要使用 python3 快速有效地做到这一点
提前致谢
解决方案
GroupBy.transform
与指定列一起使用:
cols = ['C','D']
df[cols] = df.groupby('A')[cols].transform('mean')
print(df)
A B C D
0 foo one 0.444616 -0.232363
1 bar one 0.173897 -0.603437
2 foo two 0.444616 -0.232363
3 bar three 0.173897 -0.603437
4 foo two 0.444616 -0.232363
5 bar two 0.173897 -0.603437
6 foo one 0.444616 -0.232363
7 foo three 0.444616 -0.232363
推荐阅读
- php - laravel 护照 API 基于角色的授权
- google-apps-script - 如何在谷歌电子表格中的多个(不同)电子表格之间共享相同的应用程序脚本
- ajax - 谷歌图表 - 从谷歌表格刷新数据而不刷新页面
- ghostscript - 发出绘画/显示操作符后设置页面大小
- go - Golang 从根目录导入包
- api - 如何从 HTTP 处理程序中的 URL 获取参数
- javascript - Angular ngfor 循环显示菜单
- docker - 在 docker 私有注册表的情况下使用不记名令牌或 Oauth
- angular - Angular - 错误错误:找不到“object”类型的不同支持对象“[object Object]”
- scrapy - 尝试通过scrapy spider发送电子邮件时出错:连接被对方拒绝:10061