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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:35:00