Pandas 与 MultiIndex 合并用于重复列

Den*_*loe 5 python merge join multi-index pandas

我有两个数据帧,包含相同对象(人)不同方面(左脚、右脚)的相同信息(长度、宽度)。

import pandas as pd

left_feet = pd.DataFrame(
    data={
        "Length": [20, 30, 25],
        "Width": [8, 10, 9]},
    index=[0, 1, 2])

right_feet = pd.DataFrame(
    data={
        "Length": [24, 30],
        "Width": [8, 10]},
    index=[2, 1])

print(left_feet)
   Length  Width
0      20      8
1      30     10
2      25      9

print(right_feet)
   Length  Width
2      24      8
1      30     10
Run Code Online (Sandbox Code Playgroud)

我想将这些合并到一个 DataFrame 中,所以我这样做:

feet = pd.merge(left_feet, right_feet,
         left_index=True, right_index=True,
         suffixes=["_left", "_right"])

print(feet)
   Length_left  Width_left  Length_right  Width_right
1           30          10            30           10
2           25           9            24            8
Run Code Online (Sandbox Code Playgroud)

然而,使用后缀很麻烦。我希望这些列是一个 MultiIndex,其中第一级包含“左”和“右”,第二级包含“长度”和“宽度”。

做到这一点的最佳方法是什么?

注意:关于连接对齐的 DataFrames 已经被问到类似的问题,但这个问题是关于连接(即“合并”)操作;行不一定对齐,也可能不总是有对应的行。

Ben*_*n.T 5

尝试concat,带keys参数和join='inner'

print(pd.concat([left_feet, right_feet], axis=1, keys=['Left','Right'], join='inner'))
    Left        Right      
  Length Width Length Width
1     30    10     30    10
2     25     9     24     8
Run Code Online (Sandbox Code Playgroud)