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

Pandas条件聚合:无需先过滤再关联的更简洁实现方案

实现方案

直接使用pandas的transform方法即可满足需求,该方法会将分组聚合的结果广播到对应分组的所有行,无需额外做过滤后关联的操作,原始数据可以完整保留。

代码实现

方案1:聚合结果直接回写到原表(保留所有原始行)

# 生成过滤条件掩码
filter_mask = df['rank'] <= 2

# 分组计算符合条件的行的最大值,直接写入原表新列
df[['score_max', 'label_max']] = df[filter_mask].groupby('trigger')[['score', 'label']].transform('max')

# 若存在没有符合条件行的分组,可按需填充默认值,示例填充为0
# df[['score_max', 'label_max']] = df[['score_max', 'label_max']].fillna(0)

执行后原表所有原始字段不会被修改,新增的score_max、label_max为对应trigger分组下rank<=2行的最大值,同分组所有行的这两个新增字段值一致。

方案2:仅生成聚合汇总表,不修改原表

如果不需要将聚合结果关联回原始行,仅需要得到分组统计结果,可以直接在聚合函数中嵌入过滤逻辑:

agg_result = df.groupby('trigger').agg(
    score_max=('score', lambda x: x[df.loc[x.index, 'rank'] <= 2].max()),
    label_max=('label', lambda x: x[df.loc[x.index, 'rank'] <= 2].max())
)

该方案不需要提前对原表做过滤切片,聚合计算只会统计符合条件的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:57:05