因此,我正在尝试组合/合并或连接两个数据帧,因为这些列组合在一起并成为一个分层列。
假设我在这里有两个数据帧:
series1 = pd.Series(np.random.randn(10))
series2 = pd.Series(np.random.rand(10))
df = pd.DataFrame({'Normal': series1, 'Uniform': series2})
df_wgts = df.div(df.sum(0))
第二个数据帧给了我权重。现在我想加入/组合(或者不管怎样)它们形成一个分层列,如下面
Out[3]:
Normal Uniform
data weights data weights
0 -1.407268 0.569645 0.985227 0.162974
1 -1.551743 0.628126 0.561975 0.092961
2 0.428825 -0.173583 0.258784 0.042807
3 1.453088 -0.588192 0.868771 0.143711
4 -2.037619 0.824803 0.624250 0.103262
5 -0.119474 0.048362 0.947331 0.156706
6 -0.661711 0.267852 0.691038 0.114310
7 -0.371787 0.150495 0.608671 0.100685
8 1.987500 -0.804515 0.326396 0.053992
9 -0.190243 0.077008 0.172842 0.028591
有一种简单的方法吗?实际上,我必须对数据帧上的每一列进行切片以获得此输出。
答案 0 :(得分:0)
您可以使用concat
+ swaplevel
+ sort_index
:
print (pd.concat([df, df_wgts], axis=1, keys=['data','weights'])
.swaplevel(0,1,axis=1)
.sort_index(axis=1))
Normal Uniform
data weights data weights
0 1.315780 0.300954 0.816827 0.144410
1 0.296063 0.067717 0.068083 0.012037
2 -0.107585 -0.024608 0.621109 0.109808
3 1.564411 0.357822 0.608546 0.107587
4 0.714840 0.163503 0.454494 0.080352
5 0.778800 0.178132 0.881340 0.155815
6 0.559171 0.127897 0.126216 0.022314
7 1.165832 0.266657 0.881383 0.155823
8 -1.735812 -0.397026 0.521863 0.092262
9 -0.179464 -0.041048 0.676453 0.119593