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

如何用单行Pandas代码按ID分组,基于B=1求A列最大值并回填?

单行代码实现分组筛选后回填最大值

需求说明

按ID分组,仅筛选每组中B=1的行,计算A列的最大值(忽略NaN),并将该最大值回填至原DataFrame的所有对应行;仅当某组中B=1对应的A值全为NaN时,该行的结果才为NaN。

正确单行代码

df['desired_output'] = df.assign(A=df['A'].where(df['B'] == 1)).groupby('ID')['A'].transform('max')

代码解释

  1. df.assign(A=df['A'].where(df['B'] == 1)):临时将B≠1的行的A值替换为NaN,保留B=1的行的原始A值,其他列保持不变。
  2. groupby('ID')['A'].transform('max'):按ID分组计算A列的最大值(自动忽略NaN),再通过transform将最大值广播到该组的所有行,直接完成原DataFrame的回填。

错误代码分析

  • 第一段报错代码:df.groupby('ID').A.where(df.B == 1).transform('max')
    错误原因:where的条件df.B ==1是基于整个DataFrame的,而非分组后的子DataFrame,导致维度不匹配引发报错。

  • 第二段不符合需求的代码:df.where(df.B == 1).groupby('ID').A.transform('max')
    问题所在:df.where(df.B ==1)会将B≠1的整行设为NaN,分组计算最大值后,这些B≠1的行对应的结果也会是NaN,不符合“全组回填最大值”的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:15:45