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

如何在Pandas DataFrame中标记分组的最大值

在Pandas中为分组内最大值添加布尔标记列

给原始DataFrame添加标记分组内最大值的布尔列,有两种常用的简洁实现方式:

方法一:使用groupby.transform(推荐)

这是最直接高效的方式,transform会将分组计算的最大值广播回原DataFrame的每一行,直接和原amount列做比较即可生成布尔列:

import pandas as pd

df = (pd.DataFrame(
        [
            ('A', "29.08.2022", 100),
            ('A', "30.08.2022", 200),
            ('A', "31.08.2022", 300),
            ('B', "27.08.2022", 50),
            ('B', "38.08.2022", 1000),
            ('B', "30.08.2022", 10),
        ], 
        columns = ["customer_id", "purchase_date", "amount"])
     )

# 添加is_max列
df['is_max'] = df['amount'] == df.groupby('customer_id')['amount'].transform('max')

print(df)

运行后输出结果:

customer_id purchase_date  amount  is_max
0           A    29.08.2022     100   False
1           A    30.08.2022     200   False
2           A    31.08.2022     300    True
3           B    27.08.2022      50   False
4           B    38.08.2022    1000    True
5           B    30.08.2022      10   False

方法二:使用merge合并分组最大值

如果需要先保留分组最大值的中间列,可以先计算每个客户的最大金额,再合并回原DataFrame后做比较:

# 计算每个客户的最大金额并重置索引
max_amounts = df.groupby('customer_id')['amount'].max().reset_index(name='max_amount')

# 合并回原DataFrame
df = df.merge(max_amounts, on='customer_id')

# 生成is_max列并删除中间列
df['is_max'] = df['amount'] == df['max_amount']
df = df.drop('max_amount', axis=1)

print(df)

这个方法会得到和方法一完全一致的结果,适合需要查看分组最大值的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:18:50