【发布时间】:2021-02-03 14:50:20
【问题描述】:
我有一个每日 OHLC 数据,需要转换为每周时间范围,其中星期五是第一天,星期四是最后一天。
Open - Open of Friday
High - Highest high from Friday to Thursday
Low - Lowest low from Friday to Thursday
Close - Close of Thursday
Volume - Sum of volume from Friday to Thursday
我已经尝试为此编写代码,但它没有给我想要的输出。
import pandas as pd
import os
import datetime
df = pd.read_csv('C:\\Users\\ADMIN\\Jupyter\\Backtesting Project Karta\\NIFTY-I_2011.csv')
df['Datetime'] = pd.to_datetime(df['Datetime'],format = '%Y-%m-%d %H:%M:%S')
df.set_index(df['Datetime'],inplace=True)
ohlc_dict = {
'Open':'first',
'High':'max',
'Low':'min',
'Close':'last',
'Volume':'sum'
}
df.drop(columns=['Datetime','Ticker','Open Interest'],inplace=True)
final_df = df.resample('W-FRI').agg(ohlc_dict)
final_df.dropna(inplace=True)
final_df.reset_index(inplace=True)
每日数据如下-
这是我得到的输出
第一个具有 2010 年 12 月 31 日数据的行项目是星期五,第一个星期四是 2011 年 1 月 6 日,收盘价为6071。但是我得到的关闭是不同的。高低也不对。
【问题讨论】:
-
你能测试一下
final_df = df.resample('W-FRI', closed='left').agg(ohlc_dict)吗? -
是的,但我必须使用 final_df['Datetime'] = final_df['Datetime'].shift(1)。不知道为什么,但上周的数据显示。所以不得不将(1)移到日期列。再次感谢
-
那么可以使用
final_df = df.resample('W-FRI', closed='left').agg(ohlc_dict).shift('1d')吗?
标签: pandas