如何在Pandas分组后保留全列并获取pct最大值对应行
分组保留每组pct最大值的完整行方法
下面是几种实现需求的实用方法:
方法一:排序后去重
先按objectid分组,再按pct降序排序,最后保留每个objectid的第一行(即pct最大的行):
result = df.sort_values(['objectid', 'pct'], ascending=[True, False]) \ .drop_duplicates(subset='objectid', keep='first')
- 特点:操作简单直观,默认只保留每组第一个pct最大值的行。
方法二:利用idxmax获取索引
先找到每组pct最大值对应的行索引,再通过索引提取完整行:
max_idx = df.groupby('objectid')['pct'].idxmax() result = df.loc[max_idx].reset_index(drop=True)
- 特点:直接定位目标行,效率较高;若组内存在多个pct相同的最大值,仅保留第一个出现的行。
方法三:保留所有pct最大值的行
如果需要保留每组中所有pct等于最大值的行,可使用transform广播组内最大值后筛选:
df['max_pct_in_group'] = df.groupby('objectid')['pct'].transform('max') result = df[df['pct'] == df['max_pct_in_group']].drop(columns='max_pct_in_group')
- 特点:能捕获组内所有pct达到最大值的行,适合存在并列最大值的场景。
内容的提问来源于stack exchange,提问作者bravopapa
相关产品推荐
相关产品推荐

