我想对我的时间索引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
我尝试将其分组,但是在大型数据集上却非常慢。
是否有一种快速有效的方法来实现这一目标?
问题来源:stackoverflow
假设您的数据是规则间隔的,则可以“合并”移位后的序列,然后求和。
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 *对于多列,将其沿列轴变成groupby
: df['data2'] = df['data']+1 # Another column
(pd.concat([df.shift(i).iloc[::N] for i in range(-ov, N+ov)], axis=1)
.groupby(level=0, axis=1).sum())
data data2
date
2018-03-09 12:00:00 3.0 6.0
2018-03-09 12:00:10 15.0 28.0
2018-03-09 12:00:20 28.0 42.0
2018-03-09 12:00:30 34.0 46.0
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。