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

如何基于第三列的条件合并DataFrame的两列并生成新列

Pandas按条件合并列生成新字段解决方案

原有代码错误原因

你写的循环出现问题的核心是赋值时右侧没有取对应行的值:df["column1"]是返回整列的Series对象,而非当前索引i对应的行值,导致赋值逻辑错误。另外Pandas处理这类逐行判断场景完全不需要写循环,向量化操作的执行效率远高于自定义循环,尤其适合你这种带时间序列索引的大数据量场景。

另外注意你问题描述提到是基于column3做判断,但现有代码里的判断条件是基于column1,如果实际判断逻辑和column3有关,替换下方案里的判断条件即可。

方案1:使用numpy.where(最简洁,推荐)

仅需一行代码即可完成需求:

import numpy as np
# 判断逻辑:column1大于180取column1的值,否则取column2的值
df['column4'] = np.where(df['column1'] > 180, df['column1'], df['column2'])

如果需要基于column3做判断,修改第一个参数的判断逻辑即可,示例:

# 示例:column3等于指定值时取column1,否则取column2
df['column4'] = np.where(df['column3'] == '目标值', df['column1'], df['column2'])

上述方案默认column1等于180时取column2的值,你可以根据自己的需求调整判断条件。

方案2:用Pandas原生loc实现(无需额外导入包)

如果不想依赖numpy,也可以用Pandas自带的赋值方法实现:

# 先默认给column4赋值为column2的所有值
df['column4'] = df['column2']
# 把满足column1>180的行替换为column1的对应值
df.loc[df['column1'] > 180, 'column4'] = df.loc[df['column1'] > 180, 'column1']

循环写法的修正(仅作学习参考,生产环境不推荐)

如果你只是想了解循环写法的正确逻辑,可以修正为如下形式,但数据量较大时运行速度会非常慢:

for i in df.index:
    if df.loc[i, "column1"] > 180:
        df.loc[i, "column4"] = df.loc[i, "column1"]
    elif df.loc[i, "column1"] < 180:
        df.loc[i, "column4"] = df.loc[i, "column2"]
    # 可以自行补充column1等于180时的else处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:57:03