Python / Pandas:使用多索引连接两个数据帧

时间:2018-03-07 15:40:27

标签: python pandas

我有两个具有相同索引和数据的数据帧。列。 (x,y)

>>> x
    A   B
0  A0  B0
1  A1  B1

>>> y
    A   B
0  A2  B2
1  A3  B3

我发现了如何使用多索引连接两个数据帧,如下所示。 (z)的

>>> z = pd.concat([x, y], keys=['x', 'y'], axis=1)
>>> z
    x       y
    A   B   A   B
0  A0  B0  A2  B2
1  A1  B1  A3  B3

但我想制作以下格式的数据帧(目标)

>>> target
    A       B
    x   y   x   y
0  A0  A2  B0  B2
1  A1  A3  B1  B3

我有两个问题

  1. 有没有一个很好的方法来获得目标'数据帧直接来自x,y?
  2. 有没有一个很好的方法来获得目标'通过改变列的级别来自z的datafrme?
  3. 感谢您考虑我的问题。

2 个答案:

答案 0 :(得分:2)

swaplevel使用sort_index

z = pd.concat([x, y], keys=['x', 'y'], axis=1).swaplevel(0,1, axis=1).sort_index(axis=1)
print (z)
    A       B    
    x   y   x   y
0  A0  A2  B0  B2
1  A1  A3  B1  B3

对于另一个答案,可以为键定义dictionary of DataFrames

z = pd.concat({'x':x, 'y':y}, axis=1).swaplevel(0,1, axis=1).sort_index(axis=1)

答案 1 :(得分:2)

我最近刚刚学习reorder_levels: - )

pd.concat([x,y],keys=['x','y'],axis=1).reorder_levels([1,0],axis=1).sort_index(axis=1)
Out[449]: 
    A       B    
    x   y   x   y
0  A0  A2  B0  B2
1  A1  A3  B1  B3