[英]Pandas: how to calculate a rolling window over one column (grouped by date) and count distinct values of another column?
[英]Calculating Pandas rolling values grouped by a column
我有以下 Pandas 數據框,按國家/年划分 GDP%。 我有兩個國家,美國(6 行)和 FR(4 行)。
我需要按國家/地區獲得 GDP% 的 3 期移動平均值。 如果我使用滾動窗口函數,我會得到第一個 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.