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

如何在DataFrame索引值变更前获取对应分组的最大值?

解决DataFrame分组标记最大值到组最后一行的问题

现有代码的问题

你的代码逻辑存在核心错误:

  • df['column_b'][i]是单个标量值,调用.max()只会返回它本身,根本不是分组最大值;
  • 循环里的if df['index_a'][i] == 0条件没有任何分组判断的意义,完全无法区分不同的index_a组;
  • 循环遍历iloc[:-1]还会漏掉最后一行数据。

正确实现方案

不需要用低效的循环,利用pandas的分组和位移判断可以高效实现需求:

  1. 计算每个index_a组对应的column_b最大值,并映射到该组的每一行;
  2. 判断每行是否是当前组的最后一行(通过对比当前行与下一行的index_a值);
  3. 仅在每组的最后一行将最大值写入all_max列,其余行留空(或设为NaN)。

代码示例

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'index_a': [0, 0, 0, 1, 1, 2],
    'column_b': [5, 8, 3, 2, 7, 4]
})

# 步骤1:计算每组的column_b最大值,映射到每行
df['group_max'] = df.groupby('index_a')['column_b'].transform('max')

# 步骤2:判断是否为每组最后一行
is_last_in_group = df['index_a'] != df['index_a'].shift(-1)

# 步骤3:初始化all_max并赋值
df['all_max'] = float('nan')
df.loc[is_last_in_group, 'all_max'] = df.loc[is_last_in_group, 'group_max']

# 可选:删除临时辅助列
df = df.drop('group_max', axis=1)

print(df)

运行结果

index_acolumn_ball_max
05nan
08nan
038
12nan
177
244

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:05:34