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

Pandas如何拼接索引不同的两个DataFrame得到指定输出

问题根因

你之前调用merge()、join()、concat()未得到预期结果,核心是这三个接口默认按索引标签/列值做关联匹配,但你的两个DataFrame索引存在1位偏移:df1索引范围04,df2索引范围15,而你实际需要的是按行位置逐行对齐,和原索引标签无关。

先给出测试数据复现你的场景:

import pandas as pd
df1 = pd.DataFrame({'value': ['a', 'b', 'c', 'd', 'e']}, index=range(5))
df2 = pd.DataFrame({'value': ['f', 'g', 'h', 'i', 'j']}, index=range(1, 6))
实现方案

方案1:按行位置对齐拼接(最通用,无需关心原索引)

直接把两个Series的原索引丢弃,按行位置一一对应拼接,再重命名列、设置目标索引即可:

result = pd.concat(
    [
        df1['value'].reset_index(drop=True),
        df2['value'].reset_index(drop=True)
    ],
    axis=1
)
result.columns = ['col1', 'col2']
result.index = range(5)

执行后输出结果完全匹配你的预期:

col1 col2
0    a    f
1    b    g
2    c    h
3    d    i
4    e    j

方案2:修正索引偏移后关联(适合需要保留索引逻辑的场景)

把df2的索引整体减1,对齐到0~4的范围后,直接用索引关联即可:

df2_aligned = df2.set_index(df2.index - 1)
result = df1.join(df2_aligned)
result.columns = ['col1', 'col2']
之前调用接口失效的具体原因
  • 直接调用join()/concat(axis=1):按索引标签匹配时,df1的索引0在df2中无对应值会返回空,df2的索引5在df1中无对应值会多出冗余行
  • 直接调用merge():未指定关联键时会生成笛卡尔积,指定索引关联时和join()效果一致,同样出现错位、空值问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:06:23