1

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

当刻度数据仅包含 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

任何帮助深表感谢。

谢谢你。

4

1 回答 1

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())
于 2021-10-08T12:23:48.217 回答