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

Pandas按category分类统计names列的唯一值及对应数量

问题需求

现有包含两列的数据集,数据样例如下:

category     names
vegetables   [broccoli, ginger]
fruit        [apple, grapes, dragonfruit]
vegetables   [pine]
vegetables   [bottleguord, pumpkin]
fruit        [mango, guava]

需要完成两个需求:

  • 找出每个category分类下包含的所有唯一值
  • 统计各分类唯一值的数量

测试数据集构建代码

import numpy as np
import pandas as pd    
df = pd.DataFrame({
    'category':['vegetables', 'fruit', 'vegetables', 'vegetables', 'fruit'],
    'Names':['[broccoli, ginger]','[apple, grapes, dragonfruit]','[pine]','[bottleguord, pumpkin]', '[mango, guava]']
})

最初代码问题说明

你最初写的实现代码无法得到正确结果:

g = df.groupby('category')['names'].apply(lambda x: list(np.unique(x)))

原因是数据集里的Names列存储的是字符串格式的列表,不是Python原生列表,直接对该列分组去重会把一整个字符串当成单个值处理,不会拆分内部的元素。

正确实现方案

你调整后的代码思路是对的,核心逻辑是先把字符串列表转成原生列表、拆分成单行单值之后再分组统计,还可以优化写法同时输出唯一值列表和统计数量,完整可运行代码如下:

import numpy as np
import pandas as pd    
# 构建测试数据集
df = pd.DataFrame({
    'category':['vegetables', 'fruit', 'vegetables', 'vegetables', 'fruit'],
    'Names':['[broccoli, ginger]','[apple, grapes, dragonfruit]','[pine]','[bottleguord, pumpkin]', '[mango, guava]']
})

result = (
    # 去掉字符串两端的方括号,按逗号拆分为列表
    df.assign(Names = df['Names'].str.strip('[]').str.split(', '))
    # 把列表拆分为多行,每行对应一个值
    .explode('Names')
    # 按category分组
    .groupby('category', as_index=False)
    # 同时统计唯一值列表和数量
    .agg(
        唯一值列表=('Names', lambda x: list(set(x))),
        唯一值数量=('Names', 'nunique')
    )
    # 按要求替换分类名称、设置为索引
    .replace({'category': {'vegetables': 'Vegetables', 'fruit': 'Fruits'}})
    .set_index('category')
)

print(result)

输出结果

唯一值列表  唯一值数量
category                                                     
Vegetables  [pine, ginger, pumpkin, broccoli, bottleguord]       5
Fruits      [dragonfruit, grapes, apple, guava, mango]       5

注:你之前得到的Fruits分类唯一值数量为4属于统计错误,实际该分类下共有5个唯一值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:09:04