首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算按列分组的Pandas滚动值

计算按列分组的Pandas滚动值
EN

Stack Overflow用户
提问于 2022-05-25 16:54:35
回答 1查看 50关注 0票数 2

我有以下按国家/年分列的国内生产总值%的数据。我有两个国家,美国(6行)和FR (4行)。

我需要得到按国家分列的GDP%的3期移动平均值。如果我使用滚动窗口函数,我得到第一个FR移动平均线,从美国取最后两个移动平均线,这是错误的。如何滚动按国家分组的数据?

代码语言:javascript
复制
df = pd.DataFrame({
    'country':  ['US','US','US','US', 'US', 'US', 'FR','FR','FR','FR'],
    'year': [1990, 1991, 1992, 1993, 1994, 1995, 1990, 1991, 1992, 1993],
    'gdp': [1.2, 1.4, 1.7, 2.1, 2.3, 1.9, 4.1, 4.6, 4.3, 4.4]
})

print(df)

    country year    gdp
0   US  1990    1.2
1   US  1991    1.4
2   US  1992    1.7
3   US  1993    2.1
4   US  1994    2.3
5   US  1995    1.9
6   FR  1990    4.1
7   FR  1991    4.6
8   FR  1992    4.3
9   FR  1993    4.4

df2 = df['gdp'].rolling(3, min_periods=1).mean()

print(df2)

0    1.200000
1    1.300000
2    1.433333
3    1.733333
4    2.033333
5    2.100000
6    2.766667
7    3.533333
8    4.333333
9    4.433333
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-25 16:59:35

试试这个:

代码语言:javascript
复制
df['rolling 3 mean'] = df.groupby('country', group_keys=False)['gdp']\
                         .rolling(3, min_periods=1).mean().droplevel

输出:

代码语言:javascript
复制
  country  year  gdp  rolling 3 mean
0      US  1990  1.2        1.200000
1      US  1991  1.4        1.300000
2      US  1992  1.7        1.433333
3      US  1993  2.1        1.733333
4      US  1994  2.3        2.033333
5      US  1995  1.9        2.100000
6      FR  1990  4.1        4.100000
7      FR  1991  4.6        4.350000
8      FR  1992  4.3        4.333333
9      FR  1993  4.4        4.433333
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72381592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档