如何合并多层索引与普通索引的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
相关产品推荐
相关产品推荐

