如何正确重新采样到 5 分钟
Posted
技术标签:
【中文标题】如何正确重新采样到 5 分钟【英文标题】:How do I resample to 5 min correctly 【发布时间】:2021-11-19 19:53:51 【问题描述】:我正在尝试将 1 分钟的柱状图重新采样为 5 分钟,但得到的结果不正确。
1 分钟数据:
我正在使用它来重新采样:
df2.resample("5min").agg('open':'first',
'high':'max',
'low:'min',
'close':'last')
我明白了:
对于第二行 (00:00:00),高点应为 110.34 而不是 110.35,收盘价应为 110.33。
我该如何解决这个问题?
EDIT 1 创建数据:
import datetime
import pandas as pd
idx = pd.date_range("2021-09-23 23:55", periods=11, freq="1min")
df = pd.DataFrame(index = idx)
data = [110.34,
110.33,110.34,110.33,110.33,110.33,
110.32,110.35,110.34,110.32,110.33,
]
df['open'] = data
df['high'] = data
df['low'] = data
df['close'] = data
df2 = df.resample("5min").agg('open':'first',
'high':'max',
'low':'min',
'close':'last')
print(df)
print("----")
print(df2)
【问题讨论】:
您的输出符合预期。第二行的数据00:00:00
表示在00:00:00
处开始 的5 分钟数据。即从00:00:00
到00:04:00
但我预计 00:00:00 是 23:56:00 到 00:00:00。我怎样才能做到这一点?
为什么要 23:56:00 - 00:00:00?你想滚动吗?因为第一个应该是 23:55:00 - 23:59:00,那么第二个 5 分钟应该是 00:00:00 - 00:04:00,以此类推。
我希望 5 分钟的条形图能在最后时间标记。所以 00:01:00 到 00:05:00 被标记为 00:05:00
问题是标签还是结果?
【参考方案1】:
我们可以指定closed='right'
和label='right'
可选关键字参数
d = 'open':'first','high':'max',
'low':'min','close':'last'
df.resample("5min", closed='right', label='right').agg(d)
open high low close
2021-09-23 23:55:00 110.34 110.34 110.34 110.34
2021-09-24 00:00:00 110.33 110.34 110.33 110.33
2021-09-24 00:05:00 110.32 110.35 110.32 110.33
【讨论】:
这似乎有效!如果我错过了 closed='right' 参数并且只有 label='right',我会得到什么? @ManInMoon 如果您不指定closed=right
,那么这会将2021-09-23 23:55:00
聚合到2021-09-23 23:59:00
并将其标记为2021-09-24 00:00:00
So closed='right' 聚合 23:56:00 到 24:00:00 并将其标记为 00:00:00?
@ManInMoon 没错!以上是关于如何正确重新采样到 5 分钟的主要内容,如果未能解决你的问题,请参考以下文章
如何重新采样 DataFrame 以使其与另一个 DataFrame 正确对齐?
Pandas 将 5 分钟数据重新采样为每小时平均值:日期问题 [重复]
如何使用 AVFoundation 以正确的音高播放不同采样率的音频文件?