我有一个月度状态索引的数据框:
var1 var2
date status
2003-01-01 foo 5.673044e+12 1.412815e+10
fubar 5.102315e+11 1.226870e+09
2003-02-01 foo 4.058879e+12 1.092852e+10
fubar 5.761504e+11 1.745472e+09
2003-03-01 foo 6.238392e+12 1.343086e+10
我想加入包含VALUE的df只是特定于日期的。所以我做了
df = df.unstack(level='status')
test = df.join(otherDf, how='left')
哪个按预期工作,现在我有:
(var1, foo) (var1, fubar) (var2, foo) (var2, fubar) VALUE
date
2003-01-01 5.673044e+12 5.102315e+11 1.412815e+10 1.226870e+09 68.9
2003-02-01 4.058879e+12 5.761504e+11 1.092852e+10 1.745472e+09 69.2
2003-03-01 6.238392e+12 8.801683e+11 1.343086e+10 1.165204e+09 68.9
2003-04-01 6.077365e+12 7.515224e+11 1.228901e+10 1.315599e+09 69.0
2003-05-01 6.924681e+12 6.021974e+11 1.358737e+10 1.171898e+09 68.8
但是现在我遇到了将其恢复原始格式的问题:
我天真地试过test.stack(level='status')
,这给了我
KeyError: 'Level status must be same as name (None)'
我认为问题是VALUE没有上限。 manual中没有描述类似的操作。有没有办法只将stack
应用于某些列?
我的预期输出是
var VALUE
date status
2003-01-01 foo 5.673044e+12 1.412815e+10
fubar 5.102315e+11 1.412815e+10
2003-02-01 foo 4.058879e+12 1.092852e+10
fubar 5.761504e+11 1.092852e+10
2003-03-01 foo 6.238392e+12 1.343086e+10
答案 0 :(得分:1)
首先不要拆开:
#df = df.unstack(level='status')
test = df.join(otherDf)
join()
足够聪明,可以将otherDf
中的索引与df
中的大量索引进行匹配,而无需您进行拆分和重新堆叠。