使用 Pandas 重采样功能的多个脚本的 OHLC

Posted

技术标签:

【中文标题】使用 Pandas 重采样功能的多个脚本的 OHLC【英文标题】:OHLC of Multiple Scrips Using Pandas Resample function 【发布时间】:2021-11-28 09:44:11 【问题描述】:

我有 2 个便笺的刻度数据(scrip_names 是 abc 和 xyz)。由于分时数据处于“秒”级别,我想将其转换为 OHLC(开盘价、最高价、最低价、收盘价)的 1 分钟级别。

当分时数据仅包含 1 个脚本时,我使用以下代码(Single Scrip.py 的 OHLC)来获取 1 分钟级别的 OHLC。这段代码给出了想要的结果。

代码:

import os
import time
import datetime
import pandas as pd
import numpy as np

ticks=pd.read_csv(r'C:\Users\tech\Downloads\ticks.csv')

ticks=pd.DataFrame(ticks)
#ticks=ticks.where(ticks['scrip_name']=="abc")
#ticks=ticks.where(ticks['scrip_name']=="xyz")

ticks['timestamp'] = pd.to_datetime(ticks['timestamp'])

ticks=ticks.set_index(['timestamp'])

ohlc_prep=ticks.loc[:,['last_price']]

ohlc_1_min=ohlc_prep['last_price'].resample('1min').ohlc().dropna()

ohlc_1_min.to_csv(r'C:\Users\tech\Downloads\ohlc_1_min.csv')

结果:

但是,当分时数据包含超过 1 个脚本时,此代码不起作用。应该对代码进行哪些修改以获得以下按 scrip_name 分组的结果(文件名:expected_result.csv)。

预期结果

这里是报价数据、单个脚本的python代码、单个脚本的结果和多个脚本的期望结果的链接:https://drive.google.com/file/d/1Y3jngm94hqAW_IJm-FAsl3SArVhnjGJE/view?usp=sharing

非常感谢任何帮助。

谢谢。

【问题讨论】:

【参考方案1】:

我认为你需要groupby 喜欢:

ticks['timestamp'] = pd.to_datetime(ticks['timestamp'])
ticks=ticks.set_index(['timestamp'])

ohlc_1_min=ticks.groupby('scrip_name')['last_price'].resample('1min').ohlc().dropna()

或者:

ohlc_1_min=(ticks.groupby(['scrip_name', 
                           pd.Grouper(freq='1min', level='timestamp')])['last_price']
                 .ohlc()
                 .dropna())

【讨论】:

这行得通。非常感谢你:)

以上是关于使用 Pandas 重采样功能的多个脚本的 OHLC的主要内容,如果未能解决你的问题,请参考以下文章

在多个时间范围内聚合/重采样 pandas 多索引数据帧并预测 ARIMA

如何使用 Pandas 同时应用重采样和分组?

Pandas 重采样的替代方案

pandas的resample重采样

从 Pandas 的重采样中获取索引

Pandas:将重采样与 groupby 相结合并计算时间差