You need to enable JavaScript to run this app. pandas如何将多列合并为单列并逐行去重、移除nan值
优惠活动
大模型
产品
解决方案
定价
更多

pandas如何将多列合并为单列并逐行去重、移除nan值

pandas多列合并为单列逐行去重、去空值解决方案

你现有代码存在3个可优化点:

  • 列名大小写不匹配,DataFrame定义的列名为大写A/B/C,选取时用了小写a/b/c
  • 示例数据中的'nan'是字符串格式,pandas无法识别为空值,需要先做转换
  • 直接使用agg(', '.join)没有加入空值过滤、逐行去重的逻辑

完整可运行代码

import pandas as pd
import numpy as np

# 初始化原始数据
df = pd.DataFrame(np.array([['nan', 'nan', 'nan'], ['nan', 1, 1], ['nan', 'x', 2]]), columns=['A', 'B', 'C'])
# 将字符串格式的nan转为pandas可识别的空值
df = df.replace('nan', np.nan)

# 定义行处理逻辑:过滤空值→按出现顺序去重→拼接为字符串
def merge_single_row(row):
    # 用dict.fromkeys实现有序去重,兼容Python3.7及以上版本
    valid_unique_vals = list(dict.fromkeys([val for val in row if pd.notna(val)]))
    return ','.join(map(str, valid_unique_vals))

# 应用到目标列生成结果
df['New_col'] = df[['A', 'B', 'C']].apply(merge_single_row, axis=1)

# 可选:删除原有的A/B/C列,仅保留结果列
# df = df.drop(columns=['A', 'B', 'C'])

输出结果验证

IndexABCNew_col
0NaNNaNNaN
1NaN111
2NaNx2x,2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 01:45:09