熊猫滚动日期时间多索引帧



也有类似的问题,但我datetime对象非常空间化,没有顺序,例如它们是时间上的随机时间戳。基本上我需要的是使用rolling()但在记住组(第一个索引(的同时将其滚动到第二个索引上。

您可能还想参与一个非常相似的 GitHub 问题: https://github.com/pandas-dev/pandas/issues/15584

要重现的代码:

import pandas as pd
data = {
'id': ['A','A','A','B'],
'time': pd.to_datetime(['2018-01-04 08:13:51.181','2018-01-04 08:13:55.181','2018-01-04 09:13:51.181', '2018-01-04 08:13:51.183']),
'colA': [4,3,2,1],
'30min_rolling_output': [4,7,2,1],
'1day_rolling_output': [4,7,9,1]
}
test_df = pd.DataFrame(data=data).set_index(['id', 'time'])

所需的输出是假定30m1h参数。

可视化:

colA  30min_rolling_output  1day_rolling_output
id date                                                          
A  2018-01-04 08:13:51.181     4                     4                    4
2018-01-04 08:13:55.181     3                     7                    7
2018-01-04 09:13:51.181     2                     2                    9
B  2018-01-04 08:13:51.183     1                     1                    1

从索引中删除id,留下一个可以滚动的DatetimeIndex

test_df['30min'] = test_df.reset_index(level=0).groupby('id').colA.rolling('30min').sum()
test_df['1day'] = test_df.reset_index(level=0).groupby('id').colA.rolling('1d').sum()

输出

colA  30min  1day
id time                                      
A  2018-01-04 08:13:51.181     4    4.0   4.0
2018-01-04 08:13:55.181     3    7.0   7.0
2018-01-04 09:13:51.181     2    2.0   9.0
B  2018-01-04 08:13:51.183     1    1.0   1.0

最新更新