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

基于Pandas分组提取标签高频词,无唯一高频词返回none

解决DataFrame分组后提取唯一最高频标签的问题

需求回顾

  1. 按text列分组,将每组的tag值汇总为列表存入labels列
  2. 从labels列表中提取出现频次最高的标签;若存在多个标签频次并列最高,返回"none"

完整实现代码

导入所需库并处理数据:

import pandas as pd
from collections import Counter

# 原始数据集
data = {
    'Text': ['drink coke', 'eat pizza', 'eat fruits', 'eat banana', 'eat banana', 
             'eat fruits', 'eat pizza', 'eat pizza', 'eat pizza', 'drink coke', 
             'drink coke', 'drink coke', 'drink coke'],
    'tag': ['yes', 'mic', 'yes', 'yes', 'mic', 'mic', 'no', 'mic', 'yes', 'yes', 
            'no', 'no', 'yes']
}
df = pd.DataFrame(data)

# 生成labels列(你已完成的部分)
df_grouped = df.groupby(['Text'])['tag'].apply(list).reset_index(name='labels')

# 定义函数提取唯一最高频标签
def get_top_tag(tag_list):
    tag_counts = Counter(tag_list)
    max_freq = max(tag_counts.values())
    top_tags = [tag for tag, freq in tag_counts.items() if freq == max_freq]
    return top_tags[0] if len(top_tags) == 1 else 'none'

# 生成final列
df_grouped['final'] = df_grouped['labels'].apply(get_top_tag)

print(df_grouped)

输出结果

Text                     labels  final
0  eat banana                [yes, mic]   none
1  eat fruits                [yes, mic]   none
2   eat pizza        [mic, no, mic, yes]    mic
3  drink coke  [yes, yes, no, no, yes]    yes

代码说明

  • Counter(tag_list):统计列表中每个标签的出现频次
  • max(tag_counts.values()):获取当前组的最高频次值
  • 筛选出所有频次等于最高值的标签,判断数量:唯一则返回该标签,否则返回"none"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:40:50