Pandas双条件分组求均值:仅保留多菜品厨师数据
Pandas实现双条件分组并筛选厨师计算菜品均价
步骤1:准备样本测试数据
先构造一个符合需求的数据集,方便验证代码效果:
import pandas as pd data = { 'chef_id': [1, 1, 2, 2, 2, 3, 3], 'dish': ['宫保鸡丁', '宫保鸡丁', '鱼香肉丝', '麻婆豆腐', '鱼香肉丝', '番茄炒蛋', '番茄炒蛋'], 'ingredients': ['鸡肉、花生', '鸡肉、花生', '猪肉、木耳', '豆腐、牛肉末', '猪肉、木耳', '番茄、鸡蛋', '番茄、鸡蛋'], 'price': [28, 30, 32, 28, 30, 22, 24] } df = pd.DataFrame(data)
步骤2:筛选符合条件的厨师
先统计每个厨师制作的不同菜品数量,再筛选出至少做过2种菜品的厨师ID:
# 统计每个厨师的菜品种类数 chef_dish_num = df.groupby('chef_id')['dish'].nunique() # 提取符合条件的厨师ID valid_chefs = chef_dish_num[chef_dish_num >= 2].index
步骤3:过滤数据并计算分组均价
用筛选出的厨师ID过滤原数据集,再按chef_id和dish双字段分组,计算每道菜品的平均价格:
# 仅保留符合条件的厨师数据 filtered_data = df[df['chef_id'].isin(valid_chefs)] # 双条件分组计算均价 final_result = filtered_data.groupby(['chef_id', 'dish'])['price'].mean().reset_index()
最终输出结果
运行代码后,final_result的输出如下:
chef_id dish price 0 2 麻婆豆腐 28.0 1 2 鱼香肉丝 31.0
完全符合预期,仅输出制作过至少2种菜品的厨师(chef_id=2)的分组均值。
简化写法
如果想要更简洁的代码,可以把筛选和分组逻辑合并:
final_result = df[df['chef_id'].isin(df.groupby('chef_id')['dish'].nunique()[lambda x: x >=2].index)] \ .groupby(['chef_id', 'dish'])['price'].mean().reset_index()
内容的提问来源于stack exchange,提问作者M.K
相关产品推荐
相关产品推荐

