使用 Pandas 重采样函数的多个脚本的 OHLC

OHLC of Multiple Scrips Using Pandas Resample function

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

当报价数据仅包含 1 个股票时,我使用以下代码(单次 OHLC Scrip.py)获得 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)

预期结果

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

非常感谢任何帮助。

谢谢。

我认为你需要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())