我有一个以下性质的数据框
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_asof
和pd.merge_ordered
等功能,但是我假设我必须首先将数据帧拆分为多个子集,然后再应用合并以根据从中生成的索引组合所有数据帧pd.bdate
_范围?
任何其他方式都会非常有用
一如既往地谢谢
答案 0 :(得分:2)
我建议将所有列转换为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
<强>解释强>:
MultiIndex
split
列
stack
第一级重塑reset_index
DATE
附加到MultiIndex
unstack
reindex
DatetimeIndex