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

如何按mesano分组保留revisão列最大值对应的DataFrame行?

问题描述

我有一个DataFrame,需要只保留每个mesano列值对应的revisão列最大值所在的行。这个DataFrame包含mesano、description、paymentCategories.description、paymentCategories.type、paymentCategories.interval.totalPrice、revisão这些字段。

我试了两段代码,但都没实现需求:

groupede=dfgc.groupby(['mesano','description','paymentCategories.description','paymentCategories.type']) 
result=groupede['revisao','paymentCategories.interval.totalPrice'].agg('max','sum')

还有

grouped=dfgc.groupby(['mesano','description','paymentCategories.description','paymentCategories.type','paymentCategories.interval.totalPrice'], as_index=False)['revisao'].max()
解决方案

方法一:用groupby+transform筛选行

这种方式能直接保留原DataFrame的所有列,只筛出每个mesano分组里revisão最大的行:

# 先算出每个mesano分组的revisão最大值
max_revisao = dfgc.groupby('mesano')['revisão'].transform('max')
# 筛选出revisão等于对应分组最大值的行
result = dfgc[dfgc['revisão'] == max_revisao]

方法二:排序后去重

先按mesano分组,再把revisão按降序排序,最后保留每个mesano的第一行(也就是最大值所在的行):

result = dfgc.sort_values(['mesano', 'revisão'], ascending=[True, False]) \
             .drop_duplicates(subset='mesano', keep='first')

你的代码问题在哪?

  • 第一段代码:你按多列分组,还想用agg同时求max和sum,但这么做只会生成聚合后的统计结果,拿不到原数据行;而且agg的参数格式不对,应该用字典指定每个列的聚合方式,比如agg({'revisao':'max', 'paymentCategories.interval.totalPrice':'sum'}),但就算改了也达不到你要保留原行的需求。
  • 第二段代码:分组的时候把paymentCategories.interval.totalPrice也加进去了,这会把该字段不同值的行拆成不同分组,没法正确拿到每个mesano对应的最大revisão行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:25:20