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

Python:聚合数据后合并单元格列表内重复值的问题

嘿,恭喜你已经搞定了分组聚合的核心部分!针对你现在想去掉每个单元格列表里重复值的需求,我给你分两种常见场景来提供解决方案:

处理列表去重的实用方案

1. 不关心元素顺序:用集合快速去重

如果你的业务场景里不需要保留columnB、columnC元素原本的出现顺序,直接把聚合后的列表转成集合再转回列表就可以,代码示例如下:

import pandas as pd

# 假设你的原始数据集是df
df_agg = df.groupby('columnA').agg({
    'columnB': lambda x: list(set(x)),  # 转集合自动去重
    'columnC': lambda x: list(set(x))
}).reset_index()

这种方法简单高效,但集合会打乱元素的原始顺序,适合顺序不重要的场景。

2. 需要保留元素原始出现顺序:用字典键特性或自定义函数

要是你得保留元素第一次出现的顺序,就不能用集合了。Python 3.7+的普通字典会保留插入顺序,用dict.fromkeys()就能轻松实现有序去重,代码如下:

def deduplicate_ordered(lst):
    return list(dict.fromkeys(lst))

# 将去重函数应用到聚合逻辑中
df_agg = df.groupby('columnA').agg({
    'columnB': deduplicate_ordered,
    'columnC': deduplicate_ordered
}).reset_index()

如果还在使用Python 3.6及以下版本(现在比较少见),可以改用collections.OrderedDict来实现相同效果:

from collections import OrderedDict

def deduplicate_ordered(lst):
    return list(OrderedDict.fromkeys(lst))

关于列值格式的补充说明

你提到不确定列值格式的问题,其实只要columnB、columnC的元素是可哈希的基本类型(比如字符串、数字、日期等),上面的方法都能直接适用。如果是嵌套结构或不可哈希的类型(比如列表),可以先把元素转换为可哈希的格式(比如元组)再去重,不过这种场景相对少见。

另外,如果你之前的聚合是用agg(list)实现的,只需要把list替换成上面的去重函数就能无缝衔接,不用改动其他逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:31:43