基于businessdate索引为数据帧中的多个列输入缺少的日期

2024-04-25 19:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下性质的数据帧

A_DATE       A_VALUE      B_DATE       B_VALUE     C_DATE      C_VALUE
2014-04-04   2.1          2014-04-04   4.8         2014-04-04   0.6
2014-04-05   2.3          2014-04-08   4.9         2014-04-05   0.8
2014-04-09   2.2          2014-04-09   4.6         2014-04-08   0.2

我有一个通过

 pd.bdate_range('2013-03-27', '2018-03-28')

如何获得如下所示的数据帧:

INDEX         A_DATE       A_VALUE      B_DATE       B_VALUE     C_DATE      C_VALUE
2014-04-04   2014-04-04   2.1          2014-04-04   4.8         2014-04-04   0.6
2014-04-05   2014-04-05   2.3          NA            NA         2014-04-05   0.8
2014-04-08   NA            NA          2014-04-08   4.9         2014-04-08   0.2
2014-04-09   2014-04-09   2.2          2014-04-09   4.6         NA            NA        

我知道诸如pd.merge_asofpd.merge_ordered之类的函数,但是我假设我必须首先将dataframe拆分为多个子集,然后再应用merge back来根据从pd.bdate范围生成的索引合并所有dataframe? 任何其他方法都会很有帮助

一如既往地谢谢你


Tags: 数据函数dataframedateindexvaluerangemerge
1条回答
网友
1楼 · 发布于 2024-04-25 19:20:32

我建议将所有列转换为DatatimeIndex,而不是多个datetime列:

idx = pd.bdate_range('2014-04-01', '2014-04-10')
df.columns = df.columns.str.split('_', expand=True)
df = (df.stack(0)
       .reset_index(level=0, drop=True)
       .set_index('DATE', append=True)['VALUE']
       .unstack(level=0)
       .reindex(idx))
print (df)
              A    B    C
2014-04-01  NaN  NaN  NaN
2014-04-02  NaN  NaN  NaN
2014-04-03  NaN  NaN  NaN
2014-04-04  2.1  4.8  0.6
2014-04-07  NaN  NaN  NaN
2014-04-08  NaN  4.9  0.2
2014-04-09  2.2  4.6  NaN
2014-04-10  NaN  NaN  NaN

解释:

  1. MultiIndex的第一^{}
  2. 按第一级^{}重塑形状
  3. 通过^{}移除第一级
  4. DATE附加到MultiIndex
  5. ^{}重塑形状
  6. 最后^{}DatetimeIndex

相关问题 更多 >