如何在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
相关产品推荐
相关产品推荐

