熊猫与MultiIndex合并以获得重复的列

时间:2020-08-10 12:07:35

标签: python pandas join merge multi-index

我有两个DataFrame,其中包含有关同一对象(人)的不同方面(左脚,右脚)的相同信息(长度,宽度)。

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

我想将它们合并到一个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

但是,使用后缀很麻烦。相反,我希望这些列为MultiIndex,其中第一级包含“ left”和“ right”,第二级包含“ length”和“ width”。

执行此操作的最佳方法是什么?

注意:关于连接对齐的DataFrame的问题类似,但该问题与 join (即“合并”)操作有关;这些行不一定对齐,并且不一定总是有对应的行。

2 个答案:

答案 0 :(得分:5)

尝试使用concat参数和keys的{​​{1}}:

join='inner'

答案 1 :(得分:4)

因为需要mergejoin首先创建MultiIndex,然后加入:

left_feet.columns = pd.MultiIndex.from_product([['left'], left_feet.columns])
right_feet.columns = pd.MultiIndex.from_product([['right'], right_feet.columns])

feet = pd.merge(left_feet, right_feet,
         left_index=True, right_index=True)

print(feet)
    left        right      
  Length Width Length Width
1     30    10     30    10
2     25     9     24     8