GroupBy分组后如何获取最大金额对应的完整行数据
解决方案
你可以通过以下几种方法获取分组中金额最高的完整记录:
方法一:利用idxmax定位索引后提取行
idxmax()会返回每个分组中amount列最大值对应的行索引,再用loc提取整行即可:
import pandas as pd import numpy as np # 原始DataFrame df = pd.DataFrame({ 'Group': ['A', 'A', 'A'], 'amount': [100, 120, 80], 'uniqueID': ['A32', 'B33', 'C44'], 'status': ['Success', 'Failed', 'Failed'] }) # 获取每个Group中amount最大的行索引 max_row_indices = df.groupby('Group')['amount'].idxmax() # 根据索引提取对应行 result_df = df.loc[max_row_indices].reset_index(drop=True) print(result_df)
输出结果就是你预期的DataFrame。
方法二:排序后取每组首行
先按Group分组,再按amount降序排序,最后取每组的第一行:
result_df = df.sort_values(by=['Group', 'amount'], ascending=[True, False]) \ .groupby('Group') \ .head(1) \ .reset_index(drop=True)
这种方法逻辑直观,适合需要先查看分组排序结果的场景。
为什么你的原代码没拿到完整行?
你之前用的agg({'amount': [np.max]})只是对amount列做了聚合计算,没有关联uniqueID和status列,所以只能得到最大值,无法获取对应行的其他信息。通过索引定位整行的方式可以解决这个问题。
内容的提问来源于stack exchange,提问作者Roshankumar
相关产品推荐
相关产品推荐

