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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:25:18