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

按A、B列分组取C、D列最大值并匹配E、F列对应值的实现

源数据

ABCDEF
qweasdTRUE2123999
qweasdTRUE4456888
qweasdFALSE4789777
qweasdTRUE3101666

需求

按A、B列分组,获取C、D列的最大值(D列在C为TRUE/FALSE时可能出现相同值),同时保留对应的E、F列数值。

期望输出

ABCDEF
qweasdTRUE4456888

已尝试代码

columns = ['A','B']
df2.groupby(columns,as_index=False, dropna=False)[['C','D']].max()

执行结果

ABCD
qweasdTRUE4

问题

目前仅能得到A、B、C、D列的结果,无法获取对应的E、F列数值。


解决方案

核心逻辑是:先锁定C列最大值对应的行(布尔值中TRUE大于FALSE),再在这些行里找到D列最大值的记录,从而带出对应的E、F列。以下两种方法都能实现:

方法1:分步筛选目标行

# 筛选出每组内C列等于最大值的行
mask = df2['C'] == df2.groupby(['A','B'])['C'].transform('max')
filtered_df = df2[mask]

# 找到筛选后每组内D列最大值对应的行索引
target_idx = filtered_df.groupby(['A','B'])['D'].idxmax()

# 提取最终结果
result = df2.loc[target_idx].reset_index(drop=True)

方法2:排序后取组内首行

利用布尔值排序特性,先按A、B分组,组内按C降序、D降序排序,直接取每组第一行:

result = df2.sort_values(['A','B','C','D'], ascending=[True, True, False, False]) \
            .groupby(['A','B'], as_index=False, dropna=False).first()

验证结果

运行上述任意代码后,输出与期望完全一致:

ABCDEF
qweasdTRUE4456888

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:00:48