如何使用Pandas计算GroupBy对象的滚动均值?
我的代码:
df = pd.read_csv("example.csv", parse_dates=['ds'])
df = df.set_index('ds')
grouped_df = df.groupby('city')
groups_df的内容如下:
我想使用Pandas计算我的GroupBy对象中每个组的滚动均值?
我尝试了pd.rolling_mean(grouped_df,3)。
这是我得到的错误:
AttributeError:'DataFrameGroupBy'对象没有属性'dtype'
编辑:我是否可以使用itergroups并在迭代时计算每组上每组的滚动均值?
答案 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)
您希望左栏中的日期和所有城市值都作为单独的列。一种方法是在date
和city
上设置索引,然后取消堆栈。这相当于数据透视表。然后,您可以通常的方式执行滚动操作。
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]