如何为DataFrame添加计数列以统计元素出现频次
解决方案
步骤1:构造原始DataFrame
import pandas as pd # 你的原始数据 data = { 'product1': ['straws', 'melon', 'bread'], 'product2': ['orange', 'milk', 'bananas'], 'product3': ['melon', 'book', 'juice'], 'product4': ['chair', 'coffee', 'chair'], 'product5': ['bread', 'cake', 'book'], 'product6': ['milk', 'tea', 'straws'] } df = pd.DataFrame(data)
步骤2:计算全局元素出现频率
先统计整个DataFrame中每个元素的总出现次数:
# 将DataFrame堆叠成一维序列后统计频率 global_counts = df.stack().value_counts()
得到的global_counts核心结果示例:
straws 2 melon 2 bread 2 milk 2 chair 2 book 2 orange 1 # 其余低频元素均为1次
步骤3:生成每行元素的计数列
遍历原始DataFrame的每个元素,映射对应的全局出现次数:
# 对每个元素应用全局计数映射 count_df = df.applymap(lambda x: global_counts[x])
步骤4:重命名列名
将列名改为你需要的CountProductX格式(若需严格匹配你提供的大小写不一致的列名,可手动指定):
# 统一列名格式 count_df.columns = [f'Count{col.capitalize()}' for col in count_df.columns] # 若需严格匹配预期的大小写差异,可手动替换: # count_df.columns = ['CountProduct1', 'CountProduct2', 'CountProduct3', 'Countproduct4', 'Countproduct5', 'CountProduct6']
最终结果
生成的count_df如下:
| CountProduct1 | CountProduct2 | CountProduct3 | CountProduct4 | CountProduct5 | CountProduct6 |
|---|---|---|---|---|---|
| 2 | 1 | 2 | 2 | 2 | 2 |
| 2 | 2 | 2 | 1 | 1 | 1 |
| 2 | 1 | 1 | 2 | 2 | 2 |
说明
你提供的预期输出中部分数值与实际统计结果不符(比如straws实际在全局出现2次,但预期第一行CountProduct1为1),上述结果是基于全局元素出现次数的正确统计。
内容的提问来源于stack exchange,提问作者Bry Sab
相关产品推荐
相关产品推荐

