pandas使用groupby分组时如何去除聚合结果中的重复值
问题解决方法
核心原因:现有代码在groupby后直接将同一分组下的所有entity_text值转为元组,未过滤重复值,因此输出元组会保留重复项。
可选解决方案
方案1:保留元素出现顺序去重(推荐)
Python 3.7及以上版本字典默认保留插入顺序,可通过dict.fromkeys实现有序去重,不会打乱原数据中元素的首次出现顺序:
df_ = ( df.groupby("entity_label", sort=True)["entity_text"] .apply(lambda x: tuple(dict.fromkeys(x).keys())) .reset_index(name="entity_text") )
方案2:无需保留顺序时的简洁写法
如果不要求元组内元素和原数据出现顺序一致,可直接通过集合去重:
df_ = ( df.groupby("entity_label", sort=True)["entity_text"] .apply(lambda x: tuple(set(x))) .reset_index(name="entity_text") )
方案3:大数据量下的高效写法
如果数据量较大,可先对全表按分组键和目标列去重,再做分组聚合,减少分组计算时的处理量:
df_ = ( df.drop_duplicates(subset=["entity_label", "entity_text"]) .groupby("entity_label", sort=True)["entity_text"] .apply(tuple) .reset_index(name="entity_text") )
内容的提问来源于stack exchange,提问作者Sandeep Singh
相关产品推荐
相关产品推荐

