正在计算按列分组的 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
我有以下 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