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

如何在Pandas DataFrame中按id分组后为每行添加组内最大值列

解决Pandas分组后填充最大值到每行的问题

我来帮你搞定这个问题!你想要的是按id分组后,把每组value列的最大值填充到该组的每一行中,之前的两种写法问题出在这儿:

为什么之前的写法不对?

  • 用df.groupby(['id'])['value'].idxmax():这个方法返回的是每组中value最大值对应的行索引位置,而不是最大值本身,所以你得到的会是类似0、3、5这样的索引数字,不是你需要的0或1。
  • 直接用df.groupby(['id'])['value'].max():这个会生成一个以id为索引的Series,但原DataFrame的索引是默认的连续数字(0、1、2...),直接赋值时Pandas会按索引匹配,导致大部分行匹配不到对应值,结果会出现大量NaN或者错误的填充。

正确的解法:使用transform方法

transform方法专门用来处理这种“分组计算后,把结果广播回原数据每一行”的需求,它会保持原数据的行数和索引,完美匹配你的需求:

import pandas as pd

# 你的原始数据
df = pd.DataFrame({
    'id': [1,1,1,2,2,3,3],
    'value': [0,0,0,0,1,1,1]
})

# 添加新列的正确代码
df['new_column'] = df.groupby('id')['value'].transform('max')

print(df)

运行后得到的结果正好是你预期的:

id  value  new_column
0   1      0           0
1   1      0           0
2   1      0           0
3   2      0           1
4   2      1           1
5   3      1           1
6   3      1           1

transform还支持其他聚合函数,比如mean()、sum(),如果你需要分组后计算其他统计量并填充到每行,用它就对了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:31:26