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

如何统计Pandas中列表列内各唯一值的出现次数

高效统计DataFrame列表列中元素的出现次数

嘿,刚好我之前也碰到过一样的需求,给你分享两个比嵌套循环高效得多的解决方案,轻松得到你想要的包含Genre和Occurrence列的结果:

方法一:用pandas的explode()(最直观)

explode()是pandas专门用来处理列表型列的神器,它能把每个列表里的元素拆成单独的行,之后再用value_counts()统计就精准了:

import pandas as pd

# 模拟你的数据集
df = pd.DataFrame({
    'Genres': [['Action', 'Comedy'], ['Drama', 'Action'], ['Comedy', 'Romance'], ['Action']]
})

# 核心步骤:炸开列表列 → 统计元素次数 → 重置索引并重命名列
result_df = df['Genres'].explode().value_counts().reset_index()
result_df.columns = ['Genre', 'Occurrence']

print(result_df)

输出结果会是:

Genre  Occurrence
0   Action           3
1   Comedy           2
2    Drama           1
3  Romance           1

这个方法完全是矢量化操作,没有手动循环,pandas内部做了优化,处理大数据集也超快。

方法二:用itertools.chain扁平化列表(内存友好)

如果你的数据集特别大,用itertools.chain来扁平化列表会更省内存,因为它是迭代器模式,不会一次性把所有元素加载到内存里:

from itertools import chain
import pandas as pd

df = pd.DataFrame({
    'Genres': [['Action', 'Comedy'], ['Drama', 'Action'], ['Comedy', 'Romance'], ['Action']]
})

# 把所有列表元素拼成一个迭代器
all_genres = chain.from_iterable(df['Genres'])
# 转成Series统计次数,再整理成目标DataFrame
result_df = pd.Series(all_genres).value_counts().reset_index()
result_df.columns = ['Genre', 'Occurrence']

print(result_df)

这个方法的输出和上面完全一样,但对于超大规模的数据集,内存占用会比explode()低一些,适合极端场景。

这两个方法都比嵌套循环高效太多,而且代码简洁易读,再也不用写繁琐的双层循环啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:30:41