如何对DataFrame列表类型列中的每个元素执行值计数
实现DataFrame列表列的单元素频次统计
你之前使用df['item'].value_counts()只能统计完整列表的出现次数,是因为该方法默认把每一行的整个列表作为单个统计单位,你可以用以下两种方法实现需求:
方法1:使用explode展开后统计(推荐)
pandas的explode()方法可以将列表类型的列拆分为多行,每个列表元素单独占一行,之后直接调用value_counts()即可得到单个元素的统计结果:
import pandas as pd # 展开item列 exploded = df.explode('item') # 统计频次 res = exploded['item'].value_counts() # 按你需要的格式输出 for item, count in res.items(): print(item, count)
该方法逻辑清晰,性能较好,适合绝大多数场景。
方法2:拼接所有列表后统计
如果你的pandas版本较低不支持explode(),可以先将所有行的列表拼接成一个总列表,再转为Series做统计:
# 合并所有行的列表为一个总列表,转为Series all_item_series = pd.Series(df['item'].sum()) res = all_item_series.value_counts()
注意该方法在数据量较大时性能会明显低于explode方案,仅做备选。
运行上述代码即可得到你预期的单元素频次统计结果。
内容的提问来源于stack exchange,提问作者LearningCode
相关产品推荐
相关产品推荐

