首页 > 解决方案 > 重新采样熊猫系列

问题描述

我有一个简单的时间序列

2014-11-17 05:00:00+00:00  1.30367
2014-11-17 05:01:00+00:00  1.30352
2014-11-17 05:02:00+00:00  1.30382
2014-11-17 05:03:00+00:00  1.30373
2014-11-17 05:04:00+00:00  1.30425
2014-11-17 05:05:00+00:00  1.30399
2014-11-17 05:06:00+00:00  1.30378

我想使用“2min”重新采样,例如理想情况下我想得到

2014-11-17 05:01:00+00:00  1.30352
2014-11-17 05:03:00+00:00  1.30373
2014-11-17 05:05:00+00:00  1.30399
2014-11-17 05:07:00+00:00  1.30378

内置的重采样给了我

2014-11-17 05:00:00+00:00    1.30367
2014-11-17 05:02:00+00:00    1.30382
2014-11-17 05:04:00+00:00    1.30425
2014-11-17 05:06:00+00:00    1.30378

我正在使用 series.resample(rule="2min", label="right", closed="right").last() 我对第一点特别感到困惑。

非常感谢

标签: pandas

解决方案


您不想使用label='right',而是使用loffset

from io import StringIO
import pandas


data = StringIO("""\
2014-11-17 05:00:00+00:00,1.30367
2014-11-17 05:01:00+00:00,1.30352
2014-11-17 05:02:00+00:00,1.30382
2014-11-17 05:03:00+00:00,1.30373
2014-11-17 05:04:00+00:00,1.30425
2014-11-17 05:05:00+00:00,1.30399
2014-11-17 05:06:00+00:00,1.30378
""")

window = pandas.offsets.Minute(2)

df = (
    pandas.read_csv(data, parse_dates=[0], header=None, names=['dt', 'value'])
        .set_index(['dt'])
        .resample(window, loffset=window/2)
        .last()
)

这给了我:

                             value
dt                                
2014-11-17 05:01:00+00:00  1.30352
2014-11-17 05:03:00+00:00  1.30373
2014-11-17 05:05:00+00:00  1.30399
2014-11-17 05:07:00+00:00  1.30378

推荐阅读