正在计算按列分组的 Pandas 个滚动值

Calculating Pandas rolling values grouped by a column

我有以下 Pandas 数据框,其中 GDP% 为 country/year。我有两个国家,美国(6 行)和法国(4 行)。

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

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

试试这个:

df['rolling 3 mean'] = df.groupby('country', group_keys=False)['gdp']\
                         .rolling(3, min_periods=1).mean().droplevel

输出:

  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