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

合并两个Pandas DataFrame时丢失set_index设置的索引如何解决

问题根因

pandas的merge方法默认不会保留参与合并的表的原始行索引,你生成的part_size_merge经过分组聚合后,索引是分组键part_number,你之前的合并写法没有指定保留左表索引,所以原始的part_name索引就丢失了。
另外你用concat时指定了axis=0是垂直行拼接,不符合横向列合并的需求,且两个表索引不同,即便改axis=1也会出现数据错位,不适用该场景。

可用解决方案

方案1:用join方法(最适配需求,默认保留左表索引)

join方法默认保留左表的行索引,仅需指定关联规则即可,代码如下:

# rsuffix用来区分两个表中同名的part_size列,后缀_agg表示是聚合后的结果
merged = df.join(part_size_merge, on='part_number', rsuffix='_agg')

方案2:修改merge参数保留索引

如果习惯用merge,可以指定右表用索引关联,同时保留左表原始索引:

merged = df.merge(
    part_size_merge,
    left_on='part_number', # 左表用part_number字段关联
    right_index=True, # 右表用自身索引(也就是part_number)关联
    suffixes=('', '_agg') # 同名字段加后缀区分
)

方案3:索引转列合并后回设(逻辑最直观,不容易出错)

如果怕索引相关参数记混,可以先把索引转成普通列,合并完成后再设置回索引:

# 把左表的part_name索引转回普通列
df_with_index_col = df.reset_index()
# 合并
merged = df_with_index_col.merge(part_size_merge, on='part_number', suffixes=('', '_agg'))
# 把part_name设回索引
merged.set_index('part_name', inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:54:05