如何统计Pandas含列表值的列中各唯一值的出现次数?
统计DataFrame列表列中元素的出现次数
这里提供两种简单直接的实现方式:
方法一:用Pandas的explode + value_counts
这是最简洁的Pandas原生方法,适合快速统计:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'items': [['apple', 'banana'], ['apple', 'orange'], ['banana', 'orange', 'apple']] }) # 展开列表列的每个元素为单独行,再统计频次 element_counts = df['items'].explode().value_counts() print(element_counts)
输出结果:
apple 3 banana 2 orange 2 Name: items, dtype: int64
explode()会把每个列表里的元素拆分成独立行,value_counts()自动统计每个唯一值的出现次数,结果是一个按频次降序排列的Series。
方法二:用itertools.chain + Counter
如果需要更灵活的元素处理(比如过滤空值),可以用这种方式:
import pandas as pd from collections import Counter import itertools df = pd.DataFrame({ 'items': [['apple', 'banana'], ['apple', 'orange'], ['banana', 'orange', 'apple']] }) # 将所有列表元素拼接成一个一维列表 all_elements = list(itertools.chain.from_iterable(df['items'])) # 统计每个元素的出现次数 count_dict = Counter(all_elements) # 可选:转成DataFrame并按频次排序 count_df = pd.DataFrame.from_dict(count_dict, orient='index', columns=['count']).sort_values('count', ascending=False) print(count_df)
输出结果:
count apple 3 banana 2 orange 2
注意事项
- 如果你的列表列中存在空列表或
None值,建议先通过df = df[df['items'].notna()]过滤掉空行,避免统计异常。 - 如果列表内有重复元素(比如单个列表里出现多次同一元素),两种方法都会如实统计总次数。
内容的提问来源于stack exchange,提问作者Mehul Gupta
相关产品推荐
相关产品推荐

