Pandas分组聚合去重拼接报错:AttributeError问题排查与解决
问题解答
错误原因
你写的代码逻辑顺序完全颠倒:'; '.join(el for el in x if el !='')会先把非空值拼接成一个字符串,之后你试图调用字符串的.set(x)方法——但字符串根本没有set属性,这就是报错的直接原因。而且就算语法正确,先拼接再去重也完全不符合需求,因为拼接后的字符串是整体,无法实现元素级的去重。
修正代码
要实现「非空值过滤→去重→拼接」的正确流程,分两种场景处理:
场景1:不关心去重后元素的顺序
直接用set去重,先过滤空值再去重拼接:
test = df.groupby('Group', as_index=True).agg( lambda x: '; '.join(set(el for el in x if el != '')) )
场景2:需要保留元素首次出现的顺序
如果要维持原数据中元素的出现顺序,用dict.fromkeys实现有序去重(Python 3.7+中字典默认保留插入顺序):
test = df.groupby('Group', as_index=True).agg( lambda x: '; '.join(dict.fromkeys(el for el in x if el != '')) )
补充:处理NaN空值
如果DataFrame中的空值是NaN而非空字符串,把判断条件改成pd.notna(el):
import pandas as pd test = df.groupby('Group', as_index=True).agg( lambda x: '; '.join(dict.fromkeys(el for el in x if pd.notna(el))) )
内容的提问来源于stack exchange,提问作者redwytnblakII
相关产品推荐
相关产品推荐

