Pandas多级索引下合并重复列

5

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

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”。

最佳方法是什么?

注意:关于连接对齐的数据框的类似问题已经被问过,但是这个问题是关于“join”(即“merge”)操作的;行不一定对齐,可能没有相应的行。


我指的是连接和合并/联接的概念,而不是pd.concat。如果concat函数确实可以进行联接(而不仅仅是连接),那么这就是一个很好的答案。感谢您的回答,如果我需要使用merge函数(可能需要额外的合并功能),这个回答非常重要。 - Denziloe
没关系,可能表达不够清晰。我会进行编辑。 - Denziloe
2个回答

5
尝试使用带有 keys 参数和 join='inner'concat 函数:
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

4

由于需要 合并(merge)连接(join),因此首先创建 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接