python - 计算 pandas 中每 n 行的平均值并为行分配新标签
问题描述
我有以下数据框:
d = {'quarter': ['1996q1', '1996q2', '1996q3', '1996q4', '1997q1', '1997q2', '1997q3', '1997q4', '1996q1', '1996q2', '1996q3', '1996q4', '1997q1', '1997q2', '1997q3', '1997q4'], 'country': ['USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'USA', 'ITA', 'ITA', 'ITA', 'ITA', 'ITA', 'ITA', 'ITA', 'ITA'], 'value': [0, 0, 0, 0, 1, 1, 1, 1, 3, 3, 5, 0, 0, 0, 2, 2]}
df = pd.DataFrame(data=d)
df
quarter country value
0 1996q1 USA 0
1 1996q2 USA 0
2 1996q3 USA 0
3 1996q4 USA 0
4 1997q1 USA 1
5 1997q2 USA 1
6 1997q3 USA 1
7 1997q4 USA 1
8 1996q1 ITA 3
9 1996q2 ITA 3
10 1996q3 ITA 5
11 1996q4 ITA 0
12 1997q1 ITA 0
13 1997q2 ITA 0
14 1997q3 ITA 2
15 1997q4 ITA 2
我希望计算每 4 个季度值的年平均值,同时相应地更改国家和季度列,以给出:
d2 = {'year': ['1996', '1997', '1996', '1997',], 'country': ['USA', 'USA', 'ITA', ' ITA '], 'value': [0, 1, 2.75, 1]}
df2 = pd.DataFrame(data=d2)
df2
year country value
0 1996 USA 0.00
1 1997 USA 1.00
2 1996 ITA 2.75
3 1997 ITA 1.00
解决方案
首先,将您的quarter
列转换为pd.PeriodIndex
. year
从Period
使用 acessor 中获取Period.year
。然后 groupby year
+ country
。
df.assign(year=pd.PeriodIndex(df.quarter, freq="Q").year).groupby(
["year", "country"], as_index=False, sort=False
)["value"].mean()
year country value
0 1996 USA 0.00
1 1997 USA 1.00
2 1996 ITA 2.75
3 1997 ITA 1.00
推荐阅读
- javascript - 如何在 express-validator 中访问自定义通配符验证中的对象
- javascript - 嗨,我正在尝试使用 next.js 和 firebase 开发一个聊天应用程序
- amazon-web-services - 在 SageMaker 中部署自定义预处理和后处理脚本
- java - 用于验证登录的正面和负面测试用例的断言
- c# - 如何解密 PKCS7 消息
- amazon-ec2 - DOKKU:Amazon EC2,无法推送到 Dokku 分支
- jenkins - 詹金斯 - 停止部署到下一个环境,直到签署
- python - 尽可能快地按多个条件过滤 numpy 图像数组
- xml - XAMARIN VS2019 中的 RecyclerView 不在设计器中显示数据
- c - 无法链接到自建 LLVM API