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

如何在pandas中筛选同时满足评分数量及平均分要求的合格门店数据

实现代码

import pandas as pd

# 原始数据构造
df = pd.DataFrame({'order_id': ['A1', 'A2', 'A3', 'A4', 'A5'], 
                   'customer_id': ['C1', 'C2', 'C3', 'C4', 'C5'], 
                   'store': ['Hardware1', 'Grocery3', 'Beauty5', 'Pet2', 'Electronics4'],
                   'price': [20.59, 38.97, 56.84, 89.88, 156.64],
                   'rating': [5, 4, 3,'NA',4]})

# 1. 预处理rating列:将字符串格式的'NA'转为pandas可识别的缺失值,同时统一为数值类型
df['rating'] = pd.to_numeric(df['rating'], errors='coerce')

# 2. 按门店分组,同时统计两个核心指标
# count方法自动忽略NaN,刚好统计有效评分数量;mean方法也自动忽略NaN计算平均值
store_stats = df.groupby('store', as_index=False)['rating'].agg(
    valid_rating_count = 'count',
    average_rating = 'mean'
)

# 3. 按两个规则筛选,提取符合条件的门店列表
qualified_stores = store_stats[
    (store_stats['valid_rating_count'] > 30) & 
    (store_stats['average_rating'] > 4)
]['store'].tolist()

说明

你之前尝试的promo.groupby('store')['rating']思路是正确的,仅需补充聚合统计和筛选步骤即可完成需求:

  • 不需要自定义评分计算函数,pandas内置的分组聚合方法执行效率更高,逻辑也更简洁
  • 预处理步骤是必要的:你示例中rating列的'NA'是字符串格式,直接计算会触发类型错误,pd.to_numeric的errors='coerce'参数会自动把所有无法转为数值的内容转为NaN,后续统计时会被自动忽略,不需要额外做缺失值过滤
  • 你提供的测试数据中每个门店仅有1条有效评分,因此最终返回的qualified_stores为空列表,替换为真实全量数据后即可得到正确的促销门店列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:04