我有一个以名称和日期作为每周时间范围的索引的多重索引。我正在尝试将其更改为“每日”,填充缺少的值(因为日期不重叠),并将其作为一列添加到另一个df中。
带有“值”列的1W
df为:
df_wkly = df.groupby([pd.Grouper(level='Name'), pd.Grouper(level='Date', label='left', closed='left', freq='1D')]).sum()
Value
Name Date
AA 2016-11-06 22.024915
2016-11-13 25.453228
2016-11-20 29.500000
BB 2016-10-30 29.056394
2016-11-06 28.909892
2016-11-13 27.444863
我要添加的帧的时间范围为1D。
Daily
Name Date
AA 2016-11-01 22.024915
2016-11-02 22.592978
2016-11-03 22.881993
2016-11-04 23.739071
2016-11-07 25.453228
BB 2016-10-24 29.056394
2016-10-25 29.105229
2016-10-26 28.616886
2016-10-27 28.568052
2016-10-28 28.714554
使用重采样,我可以做到这一点,但是在我的使用中,重采样非常缓慢。我也不想将日期从1W帧(第一个)添加到1D(第二个)。
df['Value'] = df_wkly['Value'].groupby('Name').resample('1D', level='Date').sum().replace(0, np.nan).ffill()
预期输出:
Daily Value
Name Date
AA 2016-11-01 22.024915 22.024915
2016-11-02 22.592978 22.024915
2016-11-03 22.881993 22.024915
2016-11-04 23.739071 22.024915
2016-11-07 25.453228 25.453228
BB 2016-10-24 29.056394 29.056394
2016-10-25 29.105229 29.056394
2016-10-26 28.616886 29.056394
2016-10-27 28.568052 29.056394
2016-10-28 28.714554 29.056394
答案 0 :(得分:0)
与concat
的解决方案略有不同。
df['Value'] = pd.concat([df, df_wkly], sort=False).sort_index()['Value'].bfill()