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

如何按双条件聚合Pandas DataFrame:分组后仅对col2含0和1的组计算col3均值

解决Pandas按双条件聚合的问题

我来帮你搞定这个分组聚合的需求!先看看你原来代码的问题:df.groupby(['col1'])['col2'].isin([0 & 1]).col3.mean() 这里有两个逻辑错误:一是0 & 1是按位与运算,结果是0,所以你其实只在检查col2是否等于0;二是isin的用法不对,而且你没有先筛选出同时包含0和1的col1分组,直接就去计算均值了,自然得不到想要的结果。

咱们一步步来实现你的需求:

步骤1:筛选出符合条件的col1分组

首先,我们需要找出所有col1分组中,col2同时包含0和1的组。可以用groupby结合agg来判断每个分组的col2是否同时有这两个值:

import pandas as pd

# 你的示例DataFrame
df = pd.DataFrame({ 
    'col1' : ['a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'], 
    'col2' : [ 0, 0, 1, 0, 1, 1, 1, 0, 1, 0], 
    'col3' : [ 3, 4, 2, 4, 1, 2, 3, 5, 2, 1] 
})

# 找出col2同时包含0和1的col1分组
valid_groups = df.groupby('col1')['col2'].agg(lambda x: {0, 1}.issubset(x.unique()))
# 提取符合条件的col1值
valid_col1 = valid_groups[valid_groups].index

这里{0,1}.issubset(x.unique())会检查当前分组的col2唯一值是否同时包含0和1,返回布尔值。运行后valid_col1会是['b', 'd'],正是我们需要的分组。

步骤2:对符合条件的行进行聚合

接下来,我们从原DataFrame中筛选出这些col1的行,然后按col1和col2分组,计算col3的均值:

# 筛选有效分组的行,再按col1+col2分组计算均值
result = df[df['col1'].isin(valid_col1)].groupby(['col1', 'col2'])['col3'].mean().reset_index()
# 重命名列名匹配你的期望输出
result.columns = ['col1', 'col2', 'mean(col3)']

查看结果

运行以上代码后,result的输出就是你想要的:

col1col2mean(col3)
b04.0
b12.0
d03.0
d12.0

这样就完美实现了你的需求:只保留那些col1分组中col2同时有0和1的组,然后计算每个组内col2对应col3的均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:30:55