我想将数据框重塑为具有两级列,而无需指定子级的名称。
作为一个例子,最初我的数据是这样的,索引为“ date”和“ product”,然后是一些列:
a b
date product
2011-11 foo 1. 2.1
2011-12 foo 2.432 2.3
2012-01 bar 0.4 1.7
2012-01 foo 0.84 1.8
2014-06 bar 0. 2.
2014-07 bar 1.68 3.
请注意,每个日期的产品组合只有一行(索引是唯一的)。
我想将其重塑为单个索引,日期,将产品移至列级别:
foo bar
a b a b
date
2011-11 1. 2.1 NaN NaN
2011-12 2.432 2.3 NaN NaN
2012-01 0.84 1.8 0.4 1.7
2014-06 NaN NaN 0. 2.
2014-07 NaN NaN 1.68 3.
由于列名a和b不是固定的,我不确定如何编写数据透视表,并且每次运行此过程时可能会有更多或更少的内容。
答案 0 :(得分:1)
使用 unstack
和 swaplevel
:
df.unstack(1).swaplevel(1,0, axis=1).sort_index(1)
product bar foo
a b a b
date
2011-11 NaN NaN 1.000 2.1
2011-12 NaN NaN 2.432 2.3
2012-01 0.40 1.7 0.840 1.8
2014-06 0.00 2.0 NaN NaN
2014-07 1.68 3.0 NaN NaN