Pandas 与重复列的 MultiIndex 合并
Pandas merge with MultiIndex for repeated columns
我有两个 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,其中第一级包含“左”和“右”,第二级包含“长度”和“宽度”。
最好的方法是什么?
注意:关于连接对齐的 DataFrames 也有类似的问题,但这个问题是关于 join(即“合并”)操作;行不一定对齐,可能并不总是有对应的行。
尝试 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
因为需要merge
或者join
先创建MultiIndex
es然后加入:
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
我有两个 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,其中第一级包含“左”和“右”,第二级包含“长度”和“宽度”。
最好的方法是什么?
注意:关于连接对齐的 DataFrames 也有类似的问题,但这个问题是关于 join(即“合并”)操作;行不一定对齐,可能并不总是有对应的行。
尝试 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
因为需要merge
或者join
先创建MultiIndex
es然后加入:
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