如何在Pandas中按店铺统计评分并新增对应计数列?
统计店铺评分数量并去重的实现方案
原始数据与需求
你的初始DataFrame结构如下:
import pandas as pd data = [['store1', 'High'], ['store1', 'Medium'], ['store2', 'Low'], ['store2', 'Low']] df = pd.DataFrame(data, columns=['Shop', 'Review'])
需求:
- 新增
High、Medium、Low三列,分别统计每个店铺获得对应评分的总条数 - 最终每个店铺仅保留一条记录
方法1:使用pd.crosstab(最简洁)
交叉制表可以直接生成店铺与评分的计数表,一步到位:
result = pd.crosstab(df['Shop'], df['Review']).reset_index() # 移除多余的轴标签,让结果更整洁 result = result.rename_axis(None, axis=1) print(result)
输出结果:
Shop High Low Medium 0 store1 1 0 1 1 store2 0 2 0
方法2:groupby + value_counts + unstack
适合需要更灵活分组逻辑的场景,统计后转成宽表:
# 按店铺分组统计各评分数量,转宽表时用0填充缺失的评分 result = df.groupby('Shop')['Review'].value_counts().unstack(fill_value=0).reset_index() result = result.rename_axis(None, axis=1) print(result)
输出与方法1完全一致。
方法3:get_dummies + groupby求和
通过哑变量转换评分列,再按店铺分组求和:
# 将Review列转为哑变量,拼接店铺列后分组求和 dummies = pd.get_dummies(df['Review']) result = pd.concat([df['Shop'], dummies], axis=1).groupby('Shop').sum().reset_index() print(result)
输出同样满足需求,缺失的评分会自动填充0。
内容的提问来源于stack exchange,提问作者fromthedark
相关产品推荐
相关产品推荐

