2015-10-18 122 views
1

如何使用Pandas計算GroupBy對象的滾動平均值?如何使用Pandas計算GroupBy對象的滾動平均值?

我的代碼:

df = pd.read_csv("example.csv", parse_dates=['ds']) 
df = df.set_index('ds') 
grouped_df = df.groupby('city') 

什麼grouped_df樣子:

enter image description here

我想計算滾動平均值每個我在我的GroupBy對象組使用熊貓的?

我試過pd.rolling_mean(grouped_df,3)。

這裏是我的錯誤:

AttributeError的:「DataFrameGroupBy」對象有沒有屬性「D類」

編輯:我使用itergroups也許並計算滾動平均值各組每組爲我迭代?

回答

1

您是否想在左側欄的日期和城市的所有值作爲單獨的列嘗試迭代。一種方法是在datecity上設置索引,然後拆開。這相當於一個數據透視表。然後,您可以用通常的方式執行滾動平均值。

df = pd.read_csv("example.csv", parse_dates=['ds']) 
df = df.set_index(['date', 'city']).unstack('city') 
rm = pd.rolling_mean(df, 3) 

我不建議使用的功能,爲某個城市的數據可以簡單地返回如下(:返回所有行):如何申請一個功能爲每個

df.loc[:, city] 
+0

城市還是這個「數據透視表」中的每一列? – pr338

2

你可以在組

In [39]: df = pd.DataFrame({'a':list('aaaaabbbbbaaaccccbbbccc'),"bookings":range(1,24)}) 
In [40]: grouped = df.groupby('a') 
In [41]: for group_name, group_df in grouped: 
    ....:  print group_name 
    ....:  print pd.rolling_mean(group_df['bookings'],3) 
    ....:  
a 
0   NaN 
1   NaN 
2  2.000000 
3  3.000000 
4  4.000000 
10  6.666667 
11  9.333333 
12 12.000000 
dtype: float64 
b 
5   NaN 
6   NaN 
7  7.000000 
8  8.000000 
9  9.000000 
17 12.333333 
18 15.666667 
19 19.000000 
dtype: float64 
c 
13 NaN 
14 NaN 
15 15 
16 16 
20 18 
21 20 
22 22 
dtype: float64