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

Python pandas分组拼接组内非空去重字符串报错求解

报错原因

你之前的代码触发类型错误的核心原因是:pandas 中的空值NaN属于float类型,直接调用', '.join时会把组内的空值一并传入,而字符串join方法要求所有待拼接元素必须是字符串类型,因此抛出类型错误。同时原写法没有做去重处理,即便解决空值问题,也会得到带重复值的拼接结果,不符合预期。

正确实现代码

你可以在分组聚合的逻辑里依次完成空值过滤、去重、拼接三个步骤,代码如下:

import pandas as pd
import numpy as np

# 原始测试数据
df = pd.DataFrame({'Material': [1,1,1,2,2,2,3,3,3,3],
                'BOM': ['A','B',np.nan,'A',np.nan,'C','A','A','B','C']})

# 分组聚合实现需求
result = df.groupby('Material')['BOM'].agg(
    lambda x: ', '.join(x.dropna().unique())
).reset_index()

执行后打印result即可得到目标结果:

Material      BOM
0         1    A, B
1         2    A, C
2         3  A, B, C
逻辑说明

聚合函数里的处理步骤完全匹配需求:

  • x.dropna():剔除当前分组内BOM列的所有空值,从根源解决类型报错问题
  • .unique():对非空的BOM值去重,避免拼接出重复内容
  • ', '.join():将处理完成的字符串序列按要求拼接成指定格式

如果数据量较大,也可以先全局过滤BOM列的空值再分组,减少分组阶段的计算量,写法等价:

result = df.dropna(subset=['BOM']).groupby('Material')['BOM'].agg(
    lambda x: ', '.join(x.unique())
).reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:36:46