将每日熊猫数据框转换为分钟频率会错误地填充日期

时间:2019-07-07 21:56:17

标签: python pandas dataframe

我正在尝试将每日频率数据帧转换为分钟数据,即对于每一行,我希望以分钟为单位重复行情自动收录器和日期的组合,并且在上一篇文章(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()

有人可以提出解决方案吗?

1 个答案:

答案 0 :(得分: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']]