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

如何用Pandas.groupby按指定列分组,获取对应最大值的目标列数据

Pandas分组提取每组最大值对应行的实现

明确:完全可以通过Pandas的groupby方法实现需求,以下是两种实用方案:

先构造示例DataFrame(方便复现测试)

import pandas as pd

data = [
    ["AR", "Aisles", "ex_1", 12.78],
    ["AR", "Aisles", "ex_2", 11.28],
    ["AR", "Aisles", "ex_3", 11.96],
    ["AR", "Favorites", "ex_1", 12.78],
    ["AR", "Favorites", "ex_2", 12.28],
    ["AR", "Favorites", "ex_3", 13.96],
    ["BR", "Favorites", "ex_1", 11.2],
    ["BR", "Favorites", "ex_2", 10.28],
    ["BR", "Favorites", "ex_3", 10.96],
]

df = pd.DataFrame(data, columns=["COUNTRY_CODE", "PDP_SOURCE", "TREAT_SLIT", "ATC_METRIC"])

方案1:groupby + idxmax(高效优先)

通过idxmax获取每组中ATC_METRIC最大值对应的行索引,再提取原表对应行:

# 获取每组最大值的行索引
max_row_indices = df.groupby(["COUNTRY_CODE", "PDP_SOURCE"])["ATC_METRIC"].idxmax()
# 提取目标行并重置索引
result_df = df.loc[max_row_indices].reset_index(drop=True)

执行后得到的结果完全符合预期:

COUNTRY_CODEPDP_SOURCETREAT_SLITATC_METRIC
ARAislesex_112.78
ARFavoritesex_313.96
BRFavoritesex_111.2

方案2:groupby + apply(支持多最大值场景)

如果组内存在多个相同的ATC_METRIC最大值,这种方法会保留所有对应行:

result_df = df.groupby(["COUNTRY_CODE", "PDP_SOURCE"], group_keys=False).apply(
    lambda group: group[group["ATC_METRIC"] == group["ATC_METRIC"].max()]
).reset_index(drop=True)

两种方案按需选择即可,单最大值场景下idxmax的执行效率更高。

内容的提问来源于stack exchange,提问作者Juan Jose Vargas Estevez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:05:59