You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多重索引与指定列合并Pandas DataFrame?

基于多重索引与共享列合并DataFrame的解决方案

核心思路

要实现同时匹配多重索引(Group、Material)和SR列的左连接,保留dfA所有行并将无匹配项填充为np.nan,关键是把多重索引的层级和共享列一起作为合并键。

实现方法

方法1:兼容所有pandas版本的通用写法

先将多重索引重置为普通列,完成合并后再恢复索引:

import pandas as pd
import numpy as np

# 重置索引为列
dfA_reset = dfA.reset_index()
dfB_reset = dfB.reset_index()

# 基于Group、Material、SR三个字段左连接
merged = pd.merge(dfA_reset, dfB_reset, on=['Group', 'Material', 'SR'], how='left')

# 恢复原多重索引
result = merged.set_index(['Group', 'Material'])

print(result)

输出结果:

SR  ValA  ValB
Group Material                
G1    M1         3     1   2.0
      M1         5     2   4.0
      M1        10     1   NaN
      M2         3     4   5.0
G2    M3         5     5   6.0
      M3        15     6   NaN

方法2:pandas 1.5+ 简化写法

如果你的pandas版本在1.5及以上,可以直接指定索引作为合并键,无需重置:

# 直接用索引+SR列做左连接
merged = pd.merge(dfA, dfB, left_index=True, right_index=True, on='SR', how='left')

# 清理重复的SR列(合并后会生成SR_x和SR_y,保留原dfA的SR)
result = merged.rename(columns={'SR_x': 'SR'}).drop(columns='SR_y')

关键说明

  • 必须将Group、Material(多重索引层级)和SR列共同作为合并键,才能实现精准匹配。
  • 左连接(how='left')是保留dfA所有行的核心,无匹配项会自动填充np.nan。

内容的提问来源于stack exchange,提问作者R Walser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:55:16