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

pandas groupby分组取V列最大值对应的B列值的实现方法咨询

示例数据构造(可直接复现测试)

import pandas as pd

df = pd.DataFrame([
    ["MHQ","Q",0.5192],["MMO","Q",0.4461],["MTR","Q",0.5385],["MVM","Q",0.351],["NCR","Q",0.0704],
    ["MHQ","E",0.5435],["MMO","E",0.4533],["MTR","E",-0.6716],["MVM","E",0.3684],["NCR","E",-0.0278],
    ["MHQ","U",0.2712],["MMO","U",0.1923],["MTR","U",0.3833],["MVM","U",0.1355],["NCR","U",0.1058]
], columns=["A","B","V"])

可用解法

你之前用groupby+agg无法得到预期结果,是因为agg仅针对分组内单列做聚合计算,无法直接关联同分组其他列的对应取值,以下是三种简洁实现方案:

方案1:idxmax定位法(无重复最大值场景最优)

通过groupby后V列的idxmax()直接拿到每组最大值对应的行索引,一次定位取值:

res = df.loc[df.groupby('A')['V'].idxmax(), ['A', 'B']].set_index('A')

输出结果:

B
A     
MHQ  E
MMO  E
MTR  Q
MVM  E
NCR  U

方案2:排序取首行法

先按V列降序排序,再按A分组取每组第一行,效果和idxmax一致:

res = df.sort_values('V', ascending=False).groupby('A').head(1)[['A', 'B']].set_index('A')

方案3:transform匹配法(适配多最大值场景)

如果同一个A分组下存在多个相同的V最大值,需要返回所有对应的B值,用这个方案:

res = df[df['V'] == df.groupby('A')['V'].transform('max')][['A', 'B']].set_index('A')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:48:03