时间序列Resample重采样结果数据异常问题咨询
嗨,我来帮你拆解一下这个问题~
首先咱们先明确你遇到的核心困惑:你预期2023-01-01 01:00:00+01:00对应的重采样均值应该是162.89,但实际得到的是90.349997,这是因为你对resample('h', label='right')的分组逻辑理解有偏差哦。
咱们先把原始数据和重采样的分组对应关系理清楚:
原始数据(30分钟间隔)
2022-12-31 22:00:00+01:00;7.500000
2022-12-31 22:30:00+01:00;8.200000
2022-12-31 23:00:00+01:00;10.800000
2022-12-31 23:30:00+01:00;9.500000
2023-01-01 00:00:00+01:00;12.300000
2023-01-01 00:30:00+01:00;168.399994
2023-01-01 01:00:00+01:00;157.399994
2023-01-01 01:30:00+01:00;73.199997
2023-01-01 02:00:00+01:00;59.700001
2023-01-01 02:30:00+01:00;74.000000
resample('h', label='right')的分组逻辑
当你设置label='right'时,重采样的每个标签代表的是该采样区间的结束时间,对应的区间是「前一个整小时到当前整小时」(默认左闭右开),所以每个标签对应的原始数据和计算结果是:
- 2022-12-31 23:00:00+01:00:包含22:00、22:30的两个数据,均值为
(7.5+8.2)/2=7.85,和你得到的结果一致 - 2023-01-01 00:00:00+01:00:包含23:00、23:30的两个数据,均值为
(10.8+9.5)/2=10.15,结果正确 - 2023-01-01 01:00:00+01:00:包含00:00、00:30的两个数据,均值为
(12.3+168.399994)/2=90.349997,这就是你实际得到的数值 - 2023-01-01 02:00:00+01:00:包含01:00、01:30的两个数据,均值应该是
(157.399994+73.199997)/2≈115.299995,你给出的结果15.299995应该是笔误啦 - 2023-01-01 03:00:00+01:00:包含02:00、02:30的两个数据,均值为
(59.7+74)/2=66.85,结果正确
你预期的162.89对应的是什么?
你计算的162.89是(168.399994+157.399994)/2≈162.89,这两个数据是00:30和01:00的数值,它们默认会被分到不同的整小时区间:00:30属于00:00-01:00区间(标签01:00),01:00属于01:00-02:00区间(标签02:00)。
如果想让这两个数据被分到同一个1小时区间,你可以调整重采样的偏移设置,让采样区间从每个小时的30分开始:
df = df.resample('h', label='right', offset='30min').mean()
这样01:00:00的标签对应的区间就是00:30-01:30,包含00:30和01:00的两个数据,均值就是你预期的162.89啦~
备注:内容来源于stack exchange,提问作者user16511234

