如何合并不同索引的两个Pandas DataFrame列?
解决DataFrame列并排合并(索引不匹配场景)
你需要将两个索引不匹配的DataFrame按列并排整合,示例数据如下:
DF1(索引为19、20):
A B 19 Apple Fruit 20 Banana Fruit
DF2(索引为321、322):
C D 321 X 2 322 Y 1
预期输出:
A B C D 0 Apple Fruit X 2 1 Banana Fruit Y 1
你之前尝试的pd.concat([DF1,DF2],axis=1,ignore_index=True)无效,原因是ignore_index=True仅重置列索引,行仍按原索引对齐,导致数据错位出现NaN。
方法1:重置索引后用concat合并
先对两个DataFrame调用reset_index(drop=True)重置行索引为默认的连续整数,再执行列方向合并:
import pandas as pd # 模拟索引不匹配的DataFrame DF1 = pd.DataFrame({'A': ['Apple', 'Banana'], 'B': ['Fruit', 'Fruit']}, index=[19, 20]) DF2 = pd.DataFrame({'C': ['X', 'Y'], 'D': [2, 1]}, index=[321, 322]) # 重置索引并合并 DF3 = pd.concat([DF1.reset_index(drop=True), DF2.reset_index(drop=True)], axis=1) print(DF3)
方法2:用join方法合并(同样需重置索引)
join方法默认按列合并,配合索引重置也能实现需求:
DF3 = DF1.reset_index(drop=True).join(DF2.reset_index(drop=True))
关键原理
当两个DataFrame索引不重叠时,直接按列合并会触发索引对齐逻辑,导致非共同索引的位置填充NaN。重置索引后,两者行索引统一为0、1...,合并时就能按行序一一对应。
内容的提问来源于stack exchange,提问作者SecretFerret
相关产品推荐
相关产品推荐

