基于Pandas分组提取标签高频词,无唯一高频词返回none
解决DataFrame分组后提取唯一最高频标签的问题
需求回顾
- 按
text列分组,将每组的tag值汇总为列表存入labels列 - 从
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
相关产品推荐
相关产品推荐

