我绞尽脑汁想找出最好的办法.我想找到前30天的滚动和,但我的'日'列不是日期时间格式.
样本数据
df = pd.DataFrame({'client': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
'day': [319, 323, 336, 352, 379, 424, 461, 486, 496, 499, 303, 334, 346, 373, 374, 395, 401, 408, 458, 492],
'foo': [5.0, 2.0, np.nan, np.nan, np.nan, np.nan, np.nan, 7.0, np.nan, np.nan, 8.0, 7.0, 22.0, np.nan, 13.0, np.nan, np.nan, 5.0, 11.0, np.nan]}
>>> df
client day foo
0 A 319 5.0
1 A 323 2.0
2 A 336 NaN
3 A 352 NaN
4 A 379 NaN
5 A 424 NaN
6 A 461 NaN
7 A 486 7.0
8 A 496 NaN
9 A 499 NaN
10 B 303 8.0
11 B 334 7.0
12 B 346 22.0
13 B 373 NaN
14 B 374 13.0
15 B 395 NaN
16 B 401 NaN
17 B 408 5.0
18 B 458 11.0
19 B 492 NaN
我想要一个新的专栏,每30天显示一次‘foo’的滚动总和.
到目前为止,我已经try 了:
df['foo_30day'] = df.groupby('client').rolling(30, on='day', min_periods=1)['foo'].sum().values
但看起来像是最后30行的滚动和.
我也在考虑可能将'day'列更改为日期时间格式,然后使用rolling('30D')
,但我不确定如何或甚至这是否是最好的方法.我也试着使用groupby reindex来扩展'day'列,并做一个简单的rolling(30)
,但它对我不起作用.
任何建议都将不胜感激.