Pandas:忽略索引按原行序合并两个DataFrame列的实现方法
如何忽略索引强制按行序合并两个DataFrame?
太懂这种索引没用但行序不能乱的场景了!你之前用pd.concat(axis=1)踩坑很正常——它默认是按索引对齐的,哪怕加了ignore_index=True也只是重命名列,根本不会改变对齐逻辑,所以才会出现一堆NaN。
给你两个最实用的解决方案,都能严格保留原行序:
方法一:直接用列的底层值赋值(最简洁)
绕过索引约束,直接提取两个df列的底层数组来对应赋值,这是最快的方式:
# 直接给df1新增列,用df2的列值填充 df1["Second"] = df2["c"].values # 如果需要生成全新的DataFrame(不修改原df),可以这么写 import pandas as pd desired_output = pd.DataFrame({ "First": df1["First"].values, "Second": df2["c"].values, "AnythingAtAll": [ "# <--- 行名称无意义,我完全不关心", "# <--- 但必须严格保留行的顺序" ] })
执行后就能得到你想要的结果:
>>> df1 First Second a 1 2 b 3 4
或者全新的DataFrame:
>>> desired_output First Second AnythingAtAll 0 1 2 # <--- 行名称无意义,我完全不关心 1 3 4 # <--- 但必须严格保留行的顺序
这里的核心是.values(或者更推荐用.to_numpy(),功能一致)会直接返回列的原始数组,完全脱离原索引,赋值时严格按行的位置一一对应。
方法二:重置索引后concat(更直观)
如果觉得直接操作数组不够直观,可以先给两个df都重置索引,再合并:
# 重置索引并丢弃原索引 df1_reset = df1.reset_index(drop=True) df2_reset = df2.reset_index(drop=True) # 按列合并,此时行序完全对应 merged_df = pd.concat([df1_reset, df2_reset], axis=1) # 按需重命名列 merged_df.columns = ["First", "Second", "AnythingAtAll"]
这个方法的逻辑更清晰,但比方法一多了两步重置索引的操作,适合需要保留原df的场景。
内容的提问来源于stack exchange,提问作者Jabber1
相关产品推荐
相关产品推荐

