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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:54:04