我有一个DataFrame
,包含超过3000行,看起来像这样:
rr_ms
time
2020-03-05 15:43:51.122000+01:00 961
2020-03-05 15:43:52.112000+01:00 946
2020-03-05 15:43:53.131000+01:00 907
2020-03-05 15:43:54.424000+01:00 952
2020-03-05 15:43:54.424000+01:00 968
2020-03-05 15:43:55.298000+01:00 1019
2020-03-05 15:43:56.133000+01:00 1011
2020-03-05 15:43:57.121000+01:00 0
2020-03-05 15:43:58.142000+01:00 1020
2020-03-05 15:43:59.099000+01:00 999
2020-03-05 15:44:00.120000+01:00 948
2020-03-05 15:44:01.441000+01:00 922
2020-03-05 15:44:02.312000+01:00 873
2020-03-05 15:44:02.312000+01:00 899
2020-03-05 15:44:03.184000+01:00 933
2020-03-05 15:44:04.143000+01:00 948
2020-03-05 15:44:05.132000+01:00 986
2020-03-05 15:44:06.124000+01:00 982
2020-03-05 15:44:07.112000+01:00 972
2020-03-05 15:44:08.402000+01:00 0
2020-03-05 15:44:09.363000+01:00 990
2020-03-05 15:44:09.363000+01:00 1069
2020-03-05 15:44:10.233000+01:00 988
2020-03-05 15:44:11.133000+01:00 940
2020-03-05 15:44:12.122000+01:00 870
2020-03-05 15:44:13.112000+01:00 859
2020-03-05 15:44:14.073000+01:00 885
...
我想使用"rr_ms"
计算一个值,就像this figure的(b)中显示的一样:
"rr_ms"
被分成5分钟的窗口,以1分钟为增量。 我以为pandas.rolling()
可能会给我想要的结果,但我认为它的行为不符合我的想法?
IN: df.rolling('5T').sum()
OUT:
rr_ms
time
2020-03-05 15:43:51.122000+01:00 961.0
2020-03-05 15:43:52.112000+01:00 1907.0
2020-03-05 15:43:53.131000+01:00 2814.0
2020-03-05 15:43:54.424000+01:00 3766.0
2020-03-05 15:43:54.424000+01:00 4734.0
... ...
所需的结果将是这样。
df
中,第一个时间戳记在15:43
。 249022
)是基于rr_ms
值从15:43
到15:47
。300041
)基于从rr_ms
到15:44
的15:48
值。依此类推。
rr_ms
time
2020-03-05 15:48:00+01:00 249022
2020-03-05 15:49:00+01:00 300041
2020-03-05 15:50:00+01:00 299396
...
我很想知道我应该使用哪种功能。
您应该首先以1分钟的频率重新采样。从那时起,您将可以使用简单的rolling
总和:
resul = df.resample('1T').sum().rolling('5T').sum()
示例数据将给出:
rr_ms
time
2020-03-05 14:43:00 8783.0
2020-03-05 14:44:00 23847.0
您可以看到总和到最后一刻都受影响。如果要影响到第一个,只需shift索引:
resul.index = resul.index = resul.index - pd.Timedelta('4min')