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
相关产品推荐
相关产品推荐

