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

如何在Pandas DataFrame中按列表项分组并统计标签数量?

解决Pandas标签统计的问题

嘿,我懂你的困扰——当标签是多值结构时,硬拆成多列确实容易出现重复统计的问题,其实不用绕这个弯路,有更直接的方法:

情况1:标签列是列表/数组类型

如果你的DataFrame里标签是以列表形式存储的(比如某列的值是['label1', 'label2']这样的),直接用explode()把每个标签拆成单独一行,再统计频次就好:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'content': ['文本1', '文本2', '文本3', '文本4', '文本5'],
    'labels': [['label1', 'label2'], ['label1'], ['label2', 'label3'], ['label1'], ['label2']]
})

# 拆分标签并统计
label_counts = df['labels'].explode().value_counts()

# 转换成你想要的输出格式
result = ', '.join([f'{k}: {v}' for k, v in label_counts.items()])
print(result)

运行后会输出:label1: 2, label2: 2, label3: 1,完美匹配你的需求。

情况2:标签是分隔符分隔的字符串

如果你的标签是用逗号/分号等分隔的字符串(比如"label1,label2"),先把字符串转成列表再拆分:

# 示例DataFrame
df = pd.DataFrame({
    'content': ['文本1', '文本2', '文本3', '文本4', '文本5'],
    'labels': ['label1,label2', 'label1', 'label2,label3', 'label1', 'label2']
})

# 拆分字符串为列表,再统计
label_counts = df['labels'].str.split(',').explode().value_counts()

情况3:已经拆成了多列(比如label1/label2列是布尔值)

如果你已经把标签拆成了多列,且每列用True/False表示是否包含该标签,直接对列求和就行:

# 示例DataFrame
df = pd.DataFrame({
    'content': ['文本1', '文本2', '文本3', '文本4', '文本5'],
    'label1': [True, True, False, True, False],
    'label2': [True, False, True, False, True],
    'label3': [False, False, True, False, False]
})

# 统计每列的True数量
label_counts = df[['label1', 'label2', 'label3']].sum()

至于你之前拆多列出现重复的问题,是因为同一个条目可能对应多个标签,拆成多列后如果直接统计所有列的非空值,会把同一个条目的多个标签重复计算,但上面的方法都是精准统计每个标签的实际出现次数,不会有重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:16:37