OHLC нескольких сценариев с использованием функции повторной выборки Pandas

#python #pandas #pandas-groupby #pandas-resample #ohlc

Вопрос:

У меня есть данные о 2 сценариях (имена сценариев-abc и xyz). Поскольку данные о тиках находятся на «втором» уровне, я хочу преобразовать их в OHLC (Открытие, Максимум, Минимум, закрытие) на уровне 1 минуты.

Когда данные тиков содержат только 1 суму, я использую следующий код (OHLC одного Scrip.py) , чтобы получить OHLC на уровне 1 минуты. Этот код дает желаемый результат.

Код:

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

ticks=pd.read_csv(r'C:UserstechDownloadsticks.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:UserstechDownloadsohlc_1_min.csv')
 

Результат:

single_scrip_результат

Однако, когда данные тиков содержат более 1 скрипта, этот код не работает. Какие изменения следует внести в код, чтобы получить следующий результат (имя файла: 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())
 

Комментарии:

1. это сработало. большое вам спасибо 🙂