首页 > 解决方案 > 计算 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

标签: pythonpandaspandas-groupby

解决方案


首先,将您的quarter列转换为pd.PeriodIndex. yearPeriod使用 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

推荐阅读