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
相关产品推荐
相关产品推荐

