【问题标题】:Conversion of Daily pandas dataframe to minute frequency incorrectly fills dates将 Daily pandas 数据帧转换为分钟频率错误地填充日期
【发布时间】:2019-07-07 21:56:17
【问题描述】:

我正在尝试将每日频率数据帧转换为分钟数据,即对于每一行,我希望按分钟重复代码和日期的组合,并且在之前的帖子 (Conversion of Daily pandas dataframe to minute frequency) 中建议对我来说使用下面的 ffil 方法,但这种方法错误地将某些行情的个别行填充到第二天。如下图所示:

所以下面的数据框应该被转换并且它可以工作,因为日期是连续的:

import pandas as pd
dict1 = [
        {'ticker':'jpm','date': '2016-11-27','returns': 0.2},
{'ticker':'ge','date': '2016-11-28','returns': 0.2},
{'ticker':'amzn','date': '2016-11-29','returns': 0.2}
]
df1= pd.DataFrame(dict1)
df1['date']      = pd.to_datetime(df1['date'])
df1=df1.set_index(['date','ticker'], drop=True)  

df_min1 = df1.unstack().asfreq('Min', method='ffill').between_time('13:30','13:32').stack()

在 df2 以下跳过 1 天,然后在结果数据帧 df_min2 中,第一个代码在最初跳过的日期中重复:

dict2 = [
        {'ticker':'jpm','date': '2016-11-27','returns': 0.2},
{'ticker':'ge','date': '2016-11-29','returns': 0.2},
{'ticker':'amzn','date': '2016-11-30','returns': 0.2}
]
df2 = pd.DataFrame(dict2)
df2['date']      = pd.to_datetime(df2['date'])
df2=df2.set_index(['date','ticker'], drop=True)  

df_min2 = df2.unstack().asfreq('Min', method='ffill').between_time('13:30','13:32').stack()

谁能提出解决方案?

【问题讨论】:

  • hmmm,如果连续的 datetimeindex,时间序列的 pandas 效果最好。所以最后需要删除带有2016-11-28 的行,因为date 中不存在?
  • 是的,我的 datetimeindex 不是连续的。所以每一天,我都有不同的代码清单,第二天,我有不同的代码。有时,会跳过一天。
  • 我知道一个事实,任何股票一年最多只出现 4 次。因此,如果连续 2 天出现一个代码,则只有第一个是正确的。所以也许可以循环遍历索引以查看是否有任何连续的代码,如果有,只保留第一个。
  • 我想出了一个解决方案,我只是在最开始的日期创建新列,并在最后创建另一个列与每日日期,如果两者不匹配,我删除该行。我将发布解决方案以供将来参考。
  • 非常感谢您在这方面的帮助以及 jezrael 之前的其他问题,谢谢!!!!

标签: python pandas dataframe


【解决方案1】:

所以下面的解决方案对我有用,我只需使用每日日期创建新列,转换后,我创建另一个每日列,只保留两者匹配的行:

  df['date_column']=pd.to_datetime(df.index.get_level_values(0))
  df['date_column']=pd.to_datetime(df['date_column']).dt.date

...converting dataframe...


  df['date_column2']=pd.to_datetime(df.index.get_level_values(0))
  df['date_column2']=pd.to_datetime(df['date_column2']).dt.date
  df=df[df['date_column']==df['date_column2']]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2020-12-10
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多