Python实现多分组取最高值:按年代分组求对应姓名最高薪资
报错原因
你编写的代码报错是因为 groupby() 执行后返回的是GroupBy分组对象,不是DataFrame结构,无法直接调用reset_index(),且你没有指定分组后取每组最高薪资对应记录的逻辑,缺少关键步骤。
正确实现代码
提供两种常用实现方案:
方案1:基于排序取分组首行(匹配你原来的实现思路)
# 先按薪资降序排序,按Bins分组后取每组第一条,再按年代排序重置索引 result = df.sort_values(by='Salary', ascending=False)\ .groupby('Bins', as_index=False)\ .head(1)\ .sort_values('Bins')\ .reset_index(drop=True)
方案2:基于最大值索引提取(性能更高,无需全表排序)
# 先取每个Bins分组下薪资最大值对应的行索引,直接提取对应行后排序重置索引 result = df.loc[df.groupby('Bins')['Salary'].idxmax()]\ .sort_values('Bins')\ .reset_index(drop=True)
两种方案执行后输出的result都和你期望的结果完全一致。
内容的提问来源于stack exchange,提问作者hk2
相关产品推荐
相关产品推荐

