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