我想对我的时间索引DataFrame进行一些重采样。
例如:
>>> df
data
date
2018-03-09 12:00:00 1
2018-03-09 12:00:01 1
2018-03-09 12:00:02 1
2018-03-09 12:00:03 1
2018-03-09 12:00:04 1
2018-03-09 12:00:05 1
2018-03-09 12:00:06 1
2018-03-09 12:00:07 1
2018-03-09 12:00:08 1
2018-03-09 12:00:09 1
2018-03-09 12:00:10 1
2018-03-09 12:00:11 2
2018-03-09 12:00:12 2
2018-03-09 12:00:13 2
2018-03-09 12:00:14 2
2018-03-09 12:00:15 2
2018-03-09 12:00:16 2
2018-03-09 12:00:17 2
2018-03-09 12:00:18 2
2018-03-09 12:00:19 2
2018-03-09 12:00:20 2
2018-03-09 12:00:21 3
2018-03-09 12:00:22 3
2018-03-09 12:00:23 3
2018-03-09 12:00:24 3
2018-03-09 12:00:25 3
2018-03-09 12:00:26 3
2018-03-09 12:00:27 3
2018-03-09 12:00:28 3
2018-03-09 12:00:29 3
2018-03-09 12:00:30 3
经过10秒和2秒的重叠重采样后,结果应如下所示:
>>> df
data
date
2018-03-09 12:00:10 14
2018-03-09 12:00:20 28
2018-03-09 12:00:30 34
我尝试通过分组进行尝试,但是在大型数据集上却非常慢。
是否有一种快速有效的方法来实现这一目标?
答案 0 :(得分:2)
假设您的数据有规律地排列,您可以Suite Setup
进行移位的序列,然后求和。
***Settings***
Suite Setup boot device
concat
对于多列,将其沿列轴变成N = 10 # Every 10 seconds from first row
ov = 2 # 2s overlap on either side
pd.concat([df.shift(i).iloc[::N] for i in range(-ov, N+ov)], axis=1).sum(1)
:
date
2018-03-09 12:00:00 3.0
2018-03-09 12:00:10 15.0
2018-03-09 12:00:20 28.0
2018-03-09 12:00:30 34.0
dtype: float64