首页 > 解决方案 > 将 Daily pandas 数据帧转换为分钟频率

问题描述

我有一个如下定义的数据框(df),具有每日频率,我想将其转换为分钟频率,从 8:30 开始,到 16:00 结束。

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

谁能建议如何做到这一点?

标签: pythonpandasdataframe

解决方案


我相信你需要重塑DataFrame.unstackfor DatetimeIndex,然后设置分钟频率DataFrame.asfreq,过滤时间DataFrame.between_time和最后DataFrame.stack使用MultiIndex

df1 = df.unstack().asfreq('Min', method='ffill').between_time('8:30','16:00').stack()
print (df1.head(10))

                           returns
date                ticker        
2016-11-28 08:30:00 aapl       0.2
                    amzn       0.2
                    fb         0.2
                    ge         0.2
                    jpm        0.2
                    msft       0.2
2016-11-28 08:31:00 aapl       0.2
                    amzn       0.2
                    fb         0.2
                    ge         0.2

推荐阅读