我有一个数据框架,其中包含317只股票的2014年月度数据(317只股票x 12个月=DF中的3804行)。我想将其转换为每日数据帧(317个tickers x 365天=115705行)。所以,我认为我需要增加样本或重新编制索引,同时将每月价值分散到每月的每一天,但我无法让它正常工作。
数据帧当前采用以下格式:
>>> df
month ticker b c
2014-1 AAU 10 .04 #different values every month for each ticker
2014-2 AAU 20 .03
2014-3 AAU 13 .06
.
2014-12 AAU 11 .03
.
.
.
2014-1 ZZY 11 .11
2014-2 ZZY 6 .03
.
2014-12 ZZY 17 .09
这就是我想要的:
>>> df
day ticker b c
2014-01-01 AAU 10 .04 #same values every day in month for each ticker
2014-01-02 AAU 10 .04
2014-01-03 AAU 10 .04
.
2014-01-31 AAU 10 .04
2014-02-01 AAU 20 .03
2014-02-02 AAU 20 .03
.
2014-02-28 AAU 20 .03
.
.
.
2014-12-30 ZZY 17 .09
2014-12-31 ZZY 17 .09
我尝试过将groupby与按天重新采样相结合,但更新后的数据帧将以日期“2014-01-13”开始,而不是1月1日,以日期“2014-12-01”结束,而不是12月31日。我还尝试将月份值从例如“2014-1”更改为“2014-01-01”等。,但重新采样的数据帧仍在“2014-01-01”结束。必须有一个更简单的方法来解决这个问题,所以我很感谢你的帮助。我整天都在绕圈子。
让我们做一个合成实验。假设我们有每日时间序列数据:
通过平均一个月内的所有数据生成每月时间序列:
现在尝试将这个月时间序列重新采样到日时间序列,在一个月内使用统一的值。使用reindex从@unutbu借用一个步骤的第一个方法工作得很好:
使用resample的第二个方法不起作用,因为它返回上个月的第一天:
首先,将月日期字符串解析为Pandas时间戳:
接下来,以月份作为索引,以ticker作为列级别,对DataFrame进行透视:
通过现在旋转,我们以后可以更容易地向前填充每一列。
现在查找开始日期和结束日期:
有趣的是,添加
pd.DateOffset(day=31)
并不总是导致日期在第31天结束。如果月份是二月,则添加pd.DateOffset(day=31)
返回二月的最后一天:这很好,因为这意味着添加
pd.DateOffset(day=31)
将始终给我们一个月中最后一个有效日。现在我们可以重新索引并向前填充数据帧:
会产生
要将ticker移出列索引并移回列中,请执行以下操作:
所以把这些放在一起:
收益率
相关问题 更多 >
编程相关推荐