【问题标题】:Python / Pandas : concatenate two dataframes with multi indexPython / Pandas:连接两个具有多索引的数据帧
【发布时间】:2018-03-07 23:52:42
【问题描述】:

我有两个具有相同索引和列的数据框。 (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 获取“目标”数据框的好方法?

感谢您考虑我的问题。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    swaplevelsort_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)
    

    【讨论】:

    • 感谢您的快速答复。 'swaplevel' 是我需要找到的。
    【解决方案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
    

    【讨论】:

    • 这看起来也很有用。我只想添加reorder_levels的链接
    • @hong sweet link :-) 快乐编码
    猜你喜欢
    • 2023-03-25
    • 2018-06-24
    • 2021-12-13
    • 2023-01-25
    • 1970-01-01
    • 2020-08-03
    • 2020-09-02
    • 2021-01-04
    • 2020-09-13
    相关资源
    最近更新 更多