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

如何合并两个单列DataFrame以得到指定结果?

问题解决:按行位置合并两个单列DataFrame

原始数据

处理数据集后得到两个单列DataFrame:

df1

df1 列1
False
Invalid
False
False

df2

df2 列1
False
False
False
Not Found

期望输出

需要合并为以下单列DataFrame:

列1
False
Invalid
False
Not Found

尝试过程中的问题

我尝试用pd.merge,测试了inner/outer/left/right所有合并方式,代码如下:

# tried all, inner, outer, left, and right
merge = pd.merge(bounce, domain, how = 'outer', on = 'description')
merge.head(10)

但结果完全不符合预期,不同合并方式的结果示例:

使用inner使用outer使用left使用right
FalseinvalidInvalidFalse
FalseinvalidFalseFalse
FalseFalseFalseFalse
FalseFalseFalseFalse

说实话,我不理解为什么仅含一列时,不同的合并方式会得到不同结果。

原因分析

merge/join是基于列值的关联合并,不是按行位置对应合并。当你指定on='description'时,它会把两个DataFrame中该列值相同的行做匹配:比如df1里的False会和df2里的所有False匹配,生成重复行;Invalid在df2中没有匹配值,outer合并会保留该行但也会带出匹配的False行,这就是不同合并方式结果不同的核心原因——它们的匹配逻辑本身就有差异,和列数多少无关。

正确解决方案

你的需求是按行索引位置对应合并,优先保留非False的值,以下两种方法都可以实现:

方法1:按索引遍历取值

直接遍历每一行,当df1的值不是False时取df1,否则取df2的值:

import pandas as pd

# 模拟你的数据
df1 = pd.DataFrame({'列1': [False, 'Invalid', False, False]})
df2 = pd.DataFrame({'列1': [False, False, False, 'Not Found']})

# 生成结果
result = pd.DataFrame({
    '列1': [df1.iloc[i, 0] if df1.iloc[i, 0] != False else df2.iloc[i, 0] 
           for i in range(len(df1))]
})

print(result)

方法2:用concat结合空值填充

先按列拼接两个DataFrame,把False替换为空值,再按行取第一个非空值:

import pandas as pd

# 模拟数据
df1 = pd.DataFrame({'列1': [False, 'Invalid', False, False]})
df2 = pd.DataFrame({'列1': [False, False, False, 'Not Found']})

# 拼接后处理
combined = pd.concat([df1, df2], axis=1)
result = combined.replace(False, pd.NA).bfill(axis=1).iloc[:, 0].to_frame('列1')

print(result)

两种方法都能输出你想要的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:13:13