将每周多重索引中的列添加到另一个每日df

时间:2019-12-15 02:18:16

标签: python pandas

我有一个以名称和日期作为每周时间范围的索引的多重索引。我正在尝试将其更改为“每日”,填充缺少的值(因为日期不重叠),并将其作为一列添加到另一个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

1 个答案:

答案 0 :(得分:0)

concat的解决方案略有不同。

df['Value'] = pd.concat([df, df_wkly], sort=False).sort_index()['Value'].bfill()