Pandas使用groupby.max()取同ID苹果最高价格时返回错误位置如何解决
Pandas取分组内最大值对应完整行解决方案
方法1:使用idxmax直接定位最大值行(推荐)
通过groupby获取每个分组内Price列最大值对应的行索引,直接用loc提取完整行,代码简洁高效:
res = df.loc[df.groupby(['ID', 'Item'])['Price'].idxmax()]
方法2:排序后去重
先按Price降序排序,再按分组键去重,保留排序后的第一条记录(即价格最高的行),逻辑更直观易理解:
res = df.sort_values('Price', ascending=False).drop_duplicates(['ID', 'Item'], keep='first')
扩展:保留分组内所有最高价格对应的行
如果同一个分组下存在多条价格同为最大值的记录,可以用transform生成过滤掩码:
# 生成是否为分组内最高价的布尔掩码 max_price_filter = df['Price'] == df.groupby(['ID', 'Item'])['Price'].transform('max') res = df[max_price_filter]
以上方法运行后均可得到正确结果:
| ID | Item | Price | Location |
|---|---|---|---|
| 1 | Apple | 2 | 1001 |
内容的提问来源于stack exchange,提问作者i.d.s.chicago
相关产品推荐
相关产品推荐

