如何正确重新采样到 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:0000: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 以正确的音高播放不同采样率的音频文件?

猪:如何重新采样时间序列数据?

如何在 Pandas/Numpy 中使用 dateOffset 对日内时间序列数据进行重新采样?

ADC采样两路信号时,如何正确显示两路波形?