如何使用Pandas计算GroupBy对象的滚动平均值?

时间:2015-10-18 14:23:15

标签: python pandas dataframe

如何使用Pandas计算GroupBy对象的滚动均值?

我的代码:

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

groups_df的内容如下:

enter image description here

我想使用Pandas计算我的GroupBy对象中每个组的滚动均值?

我尝试了pd.rolling_mean(grouped_df,3)。

这是我得到的错误:

AttributeError:'DataFrameGroupBy'对象没有属性'dtype'

编辑:我是否可以使用itergroups并在迭代时计算每组上每组的滚动均值?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]