You need to enable JavaScript to run this app. Pandas多列含逗号分隔值与空值的拆分去重排序合并为单列Series
优惠活动
大模型
产品
解决方案
定价
更多

Pandas多列含逗号分隔值与空值的拆分去重排序合并为单列Series

Pandas 行级跨列多值文本聚合处理方案

需求说明

在Pandas数据处理场景中,针对单元格为单值/, 分隔多值、含部分nan空值的DataFrame,需要逐行聚合处理所有列值,最终输出单列Series,处理规则为:

  • 处理全程忽略所有nan空值
  • 对单元格内文本按, 规则拆分
  • 汇总所有拆分后的取值,剔除重复项保留唯一值
  • 剩余唯一值按字母表顺序排序
  • 最终用, 拼接为整行输出字符串

示例参考

输入DataFrame构造

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'c1' : ['a'  , 'aa'     , np.nan, np.nan, 'a, aa', 'abc'  , 'acd'  ],
    'c2' : ['ab' , 'ab, abc', 'ab'  , np.nan, np.nan , 'ab, a', 'ab, a'],
    'c3' : ['abc', np.nan   , 'a'   , np.nan, 'abc'  ,  np.nan, np.nan],
    'c4' : ['abc', 'ab'     , 'a'   , np.nan, 'ab'  ,  np.nan, np.nan]
})

预期输出结果

调用自定义行处理方法得到的单列Series结果如下:

索引结果值
0a, ab, abc
1aa, ab, abc
2a, ab
3(空字符串)
4a, aa, ab, abc
5a, ab, abc
6a, ab, acd

注:原示例中第6行结果标注的abd为笔误,对应输入单元格取值为acd,实际输出应为acd

实现代码

可直接复用的处理逻辑如下,通过逐行应用函数完成全表处理:

def process_row(row):
    collected = []
    # 遍历行内所有单元格
    for cell_val in row:
        # 跳过空值
        if pd.isna(cell_val):
            continue
        # 按分隔符拆分文本,加入收集列表
        collected.extend(cell_val.split(', '))
    # 去重后按字母序排序
    sorted_unique = sorted(set(collected))
    # 拼接为目标格式字符串
    return ', '.join(sorted_unique)

# 应用处理逻辑,得到最终结果Series
result_series = df.apply(process_row, axis=1)

实现效果说明:全为空值的行,收集列表为空,会自动输出空字符串,完全匹配预期输出要求;去重、排序逻辑均满足需求规则,无额外副作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 10:36:03