如何用Pandas统计DataFrame列表列中各元素的唯一出现次数
解决DataFrame列表列元素出现次数统计问题
嘿,这事儿好办!要统计你那列包含列表的DataFrame里每个元素的总出现次数,我给你分享两个实用的方法,都能得到你想要的字典结果:
方法一:用explode() + value_counts()(最推荐)
这是Pandas里最直观高效的写法,先把列表列“展开”成每行一个元素,然后直接统计频次,最后转成字典就行:
import pandas as pd # 先构造你的示例DataFrame df = pd.DataFrame({ 'pos_tag': [['Noun','verb','adjective'], ['Noun','verb'], ['verb','adjective'], ['Noun','adverb']] }) # 核心操作:展开列→统计次数→转字典 my_dict = df['pos_tag'].explode().value_counts().to_dict() print(my_dict) # 输出正好是你要的:{'Noun': 3, 'verb': 3, 'adjective': 2, 'adverb': 1}
这个方法处理大数据量也很高效,完全利用Pandas的向量操作,比手动循环快得多。
方法二:手动迭代统计(适合理解底层逻辑)
如果你想自己控制计数过程,或者不想依赖Pandas的高级方法,可以用双层循环手动累加:
my_dict = {} # 遍历每一行的列表 for tags_list in df['pos_tag']: # 遍历列表里的每个元素 for tag in tags_list: # 用get方法避免KeyError,不存在的元素默认计数0,再加1 my_dict[tag] = my_dict.get(tag, 0) + 1 print(my_dict) # 同样得到预期的字典结果
这个方法更基础,适合新手理解计数的逻辑,小数据量下完全够用。
小提示
如果你的元素存在大小写不一致的情况(比如'Verb'和'verb'),可以在统计前统一转换大小写,比如把tag改成tag.lower(),这样就能把相同语义的元素归为一类啦。
内容的提问来源于stack exchange,提问作者lulu mirzai
相关产品推荐
相关产品推荐

