![](/img/trans.png)
[英]Pandas MultiIndex Dataframe Groupby Rolling Mean
[英]Pandas Rolling With MultiIndex and GroupBy
我正在考虑为给定的id
创建过去n
结果的滚动总和。 DataFrame 的索引是id
和date
。
下面的代码适用于非基于时间的滚动窗口,即整数。 但是,不适用于基于时间的间隔,例如'10D'
(10 天)。
1.
df2['rolling_sum'] = df2.groupby(['id'])['a_column_to_rolling_sum'].apply(lambda x: x.rolling(2, 1).sum().shift())
>> Rolling Result
id date_dt
-2143487296 2019-07-08 NaN
2019-07-15 0.104478
2019-07-19 0.217260
-2143477291 2019-07-05 NaN
2019-07-10 0.238764
2019-07-16 0.391669
2019-07-22 0.255469
2019-07-29 0.244011
下面的代码几乎可以得到我想要的,但是,当到达一个新组时,它应该是NaN
因为不能有以前的总和。
2.
rolling_result = (
df2
.reset_index(level=0)
.groupby('id')['a_column_to_rolling_sum']
.rolling('10D', min_periods=1)
.sum()
.shift(1)
)
# Add to df
df2['rolling_sum'] = rolling_result
>> Rolling Result
id date_dt
-2143487296 2019-07-08 NaN
2019-07-15 0.104478
2019-07-19 0.217260
-2143477291 2019-07-05 0.229506 <- Why is it not NaN!
2019-07-10 0.238764
2019-07-16 0.391669
2019-07-22 0.255469
2019-07-29 0.244011
两列的图像,左边是我想要的,右边是我从2得到的。
回顾一下:我想按多列分组,包括id
和date
。 对于这些组中的每一个,我想创建前n
天( '10D'
)和m
次出现(整数值)的滚动总和,这样每个组的开始都是NaN
。
非常感谢!
您应该从rolling
中删除min_periods=1
参数,这将为您提供您所寻求的(作为参考, min_periods
参数记录为“窗口中需要具有值的最小观察数;否则,结果为 np.nan。” )
问题发生在轮班期间。 滚动结果需要再次分组,即
rolling_result = (
df2
.reset_index(level=0)
.groupby('id')['a_column_to_rolling_sum']
.rolling('10D', min_periods=1)
.sum()
.groupby('id')
.shift(1)
)
# Add to df
df2['rolling_sum'] = rolling_result
这也适用于多个groupby
参数。 如果您有其他索引,请删除所有日期栏,即.reset_index(level=(0,1,...))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.