组合/连接/合并2个数据帧,一个包含原始数据,另一个包含权重

时间:2017-05-10 13:31:57

标签: python-3.x pandas join dataframe merge

因此,我正在尝试组合/合并或连接两个数据帧,因为这些列组合在一起并成为一个分层列。

假设我在这里有两个数据帧:

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

有一种简单的方法吗?实际上,我必须对数据帧上的每一列进行切片以获得此输出。

1 个答案:

答案 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