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

Python中DataFrame内列表去重及结构解析求助

解析DataFrame结构与去重方案

先确认结构类型

执行以下代码快速判断:

  • 查看列的整体类型:df.dtypes,若结果为object,说明列内存储的是列表/字典等非原生数值类型
  • 查看单个单元格的内容类型:type(df['state'].iloc[0])
    • 若返回<class 'list'>:整列是元素为列表的Series,这是groupby.agg(list)后最常见的结构
    • 若返回<class 'pandas.core.series.Series'>或<class 'pandas.core.frame.DataFrame'>:说明是嵌套的分组结构,需要先扁平化

去重代码

情况1:列是「元素为列表的Series」

保留原顺序的去重(推荐,pd.unique会保留元素首次出现的顺序)

# 对state、school、grade列分别去重
df['state'] = df['state'].apply(lambda x: list(pd.unique(x)))
df['school'] = df['school'].apply(lambda x: list(pd.unique(x)))
df['grade'] = df['grade'].apply(lambda x: list(pd.unique(x)))

不关心顺序的快速去重(利用集合去重,速度更快但会打乱原顺序)

df['state'] = df['state'].apply(lambda x: list(set(x)))
df['school'] = df['school'].apply(lambda x: list(set(x)))
df['grade'] = df['grade'].apply(lambda x: list(set(x)))

情况2:列是嵌套的DataFrame/Series

如果分组后未用agg聚合,导致列内是嵌套的DataFrame或Series,先扁平化再去重:

# 以state列为例,先扁平化嵌套结构为列表,再去重
df['state'] = df['state'].apply(lambda x: list(pd.unique(x.values.flatten())))
# school和grade列同理替换列名即可

验证结果

执行df['state'].iloc[0]查看第一个单元格的内容,确认重复项已被移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:52:10