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

Python Pandas按条件合并两列生成新列的实现问题

问题解决:合并LBSPCCND与LBSPCCND_OTHER列

错误原因分析

你编写的代码报错Expected a 1D array, got an array with shape (13, 3),是因为df[df[condition1 & condition2]]返回的是包含3列的完整DataFrame,而新列LBSPCCND_ALL需要的是一维的数值序列(Series),两者形状不匹配导致赋值失败。

正确实现代码

根据你的需求,我们可以通过两种简洁方式生成目标列:

方法1:使用numpy.where嵌套判断

import numpy as np

# 生成LBSPCCND_ALL列
df["LBSPCCND_ALL"] = np.where(
    # 条件1:LBSPCCND不是"Other",保留原列值
    df["LBSPCCND"] != "Other",
    df["LBSPCCND"],
    # 条件2:LBSPCCND是"Other"时,判断LBSPCCND_OTHER是否非空,是则取其值,否则设为NaN
    np.where(df["LBSPCCND_OTHER"] != "", df["LBSPCCND_OTHER"], np.nan)
)

方法2:使用pandas的mask+where组合

# 生成LBSPCCND_ALL列
df["LBSPCCND_ALL"] = df["LBSPCCND"].mask(
    # 当LBSPCCND等于"Other"时,替换为后续值
    df["LBSPCCND"] == "Other",
    # 仅当LBSPCCND_OTHER非空时才替换,否则为NaN
    df["LBSPCCND_OTHER"].where(df["LBSPCCND_OTHER"] != "")
)

合并回主DataFrame

因为SUBJID是唯一标识,处理完成后可以通过merge合并回主数据集:

# 将处理后的列合并回igan主DataFrame
igan = igan.merge(df[["SUBJID", "LBSPCCND_ALL"]], on="SUBJID", how="left")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:10:30