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

Pandas使用groupby分组时按条件选取列值及聚合计算的问题咨询

问题原因

你编写的代码报错核心原因是agg方法中传入的聚合规则必须是可作用于分组后序列的可调用对象、或pandas支持的内置聚合函数字符串,你写的any(completed="Yes")是立即执行的表达式,不是可调用的聚合函数,无法满足自定义聚合逻辑。

正确实现方案

方法1:自定义聚合函数(可读性最优)

我们先单独编写处理completed列分组逻辑的函数,再传入agg中调用:

import pandas as pd
import numpy as np

# 自定义completed列聚合规则
def agg_completed(s):
    # 优先判断分组内是否存在Yes
    if (s == "Yes").any():
        return "Yes"
    # 无Yes时判断是否存在No
    elif (s == "No").any():
        return "No"
    # 都不存在返回NaN
    else:
        return np.nan

# 执行分组聚合
df_groupby = df.groupby("sid", as_index=False).agg(
    score_max = ("score", "max"),
    completed = ("completed", agg_completed)
)

方法2:lambda简写(适合单场景快速实现)

如果不需要复用聚合逻辑,也可以直接用lambda函数简化代码:

df_groupby = df.groupby("sid", as_index=False).agg(
    score_max = ("score", "max"),
    completed = ("completed", lambda s: "Yes" if "Yes" in s.values else "No" if "No" in s.values else np.nan)
)

验证输出

以上代码运行后得到的df_groupby完全符合你给出的预期结果:

sidscore_maxcompleted
10170No
10256Yes
10388Yes
10579NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:39:02