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

Pandas如何移除NaN并将多列剩余有效值合并为单列

多列NaN值合并为有效值单列的高效实现

你可以根据实际场景选择下面两种通用实现,无需手动枚举所有待合并列,适配列数较多的场景:

方法1:利用stack()自动丢弃空值(推荐,适合每行仅1个有效值的场景)

stack()操作会自动将行转列并丢弃NaN值,刚好适配你给出的示例场景,代码如下:

# 筛选所有待合并的列,这里以列名包含Set_为例,你可以根据实际规则调整筛选逻辑
merge_cols = df.filter(like="Set_").columns
# 合并生成新列,reset_index保证行对应关系不变
df["Set"] = df[merge_cols].stack().reset_index(drop=True)
# 提取最终需要的结果
result = df[["Name", "Set"]]

提示:如果存在全行待合并列均为NaN的情况,可将stack()行修改为df[merge_cols].stack().reindex(df.index),避免行索引错位。

方法2:逐行提取非空值(适合每行可能存在多个有效值、需自定义取值逻辑的场景)

如果你需要对每行的多个有效值做自定义处理(比如取第一个/最后一个,或拼接所有有效值),可以用apply逐行处理:

merge_cols = df.filter(like="Set_").columns
# 示例为取每行第一个非空值,如需拼接可改为 lambda x: '/'.join(x.dropna())
df["Set"] = df[merge_cols].apply(lambda row: row.dropna().iloc[0], axis=1)
result = df[["Name", "Set"]]

注意事项

你原有代码中的df['Set_1'] != 'NaN'是错误写法:pandas中的空值为np.nan,属于浮点数类型,不能直接用等于/不等于判断,需用pd.isna()或pd.notna()做空值校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:15:02