【问题标题】:Resample daily OHLC to weekly where Friday is the first day and Thursday is the last?将每日 OHLC 重新采样到每周,其中星期五是第一天,星期四是最后一天?
【发布时间】: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


【解决方案1】:

您需要closed='left',因为WDataFrame.resample 中是默认的closed='right'

final_df = df.resample('W-FRI', closed='left').agg(ohlc_dict)

最后:

final_df['Datetime'] = final_df['Datetime'].shift(1)

另一个想法:

final_df = df.resample('W-FRI', closed='left').agg(ohlc_dict).shift('1d')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 2021-05-25
    • 2022-07-06
    相关资源
    最近更新 更多