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

如何合并多层索引与普通索引的Pandas DataFrame?

解决Pandas多层索引DataFrame与普通索引DataFrame合并不匹配问题

问题根源

你的bd_df是多层索引结构,name属于索引层级而非普通列;而bt_df的name是普通列。直接重命名轴并未将bd_df的name从索引转为列,导致合并时键的位置/类型不匹配,最终出现数据不匹配、字段为NaN、回合数缺失的问题。

解决方案步骤

1. 提取多层索引中的name和round为列

先将bd_df的索引层级转为普通列,这样才能和bt_df的name列匹配:

# 假设bd_df的多层索引层级为['name', 'round'],根据实际情况调整
bd_df = bd_df.reset_index(['name', 'round'])

2. 统一匹配键的格式(关键)

检查两个DataFrame的name列是否存在格式差异(比如空格、大小写、拼写错误),统一格式避免匹配失败:

# 去除首尾空格、转为小写(根据实际数据调整规则)
bd_df['name'] = bd_df['name'].str.strip().str.lower()
bt_df['name'] = bt_df['name'].str.strip().str.lower()

3. 执行合并操作

指定on='name'作为匹配键,根据需求选择合并方式(how参数):

# 示例:左合并,保留bd_df的所有数据,匹配bt_df的对应数据
merged_df = pd.merge(bd_df, bt_df, on='name', how='left')

验证结果

合并后检查merged_df的NaN情况,如果还有异常,进一步排查:

  • 确认两个DataFrame中name的唯一值是否有交集
  • 检查round列是否在reset_index后正常转为列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:30:52