在python中查找多个组中的最大值

Posted

技术标签:

【中文标题】在python中查找多个组中的最大值【英文标题】:Find the highest value within multiple groups in python 【发布时间】:2021-12-20 22:12:22 【问题描述】:

我试图找出每个名字在每十年内的最高薪水。下面是我的示例数据集和代码行

| Bins  | Name | Salary |
|-------|------|--------|
| 1990s | Ron  | 8000   |
| 1990s | Ron  | 8500   |
| 2000s | Hary | 7000   |
| 1980s | Ron  | 6800   |
| 2010s | John | 10000  |
| 2010s | John | 21000  |

df.sort_values(by='Salary', ascending=False).groupby('Bins').reset_index()

但我不断收到错误:“需要重新包装系列中的列以应用关键功能”

我想要的输出应该是这样的:

| Bins  | Name | Salary |
|-------|------|--------|
| 1980s | Ron  | 6800   |
| 1990s | Ron  | 8500   |
| 2000s | Hary | 7000   |
| 2010s | John | 21000  |

【问题讨论】:

让我知道我的解决方案是否适合您或需要任何微调。谢谢! 【参考方案1】:

您可以按['Bins', 'Name']分组并使用GroupBy.first()获取组内的最高值(由于您已按降序对值进行排序,因此组内的第一个条目是具有最高值的条目):

df.sort_values(by='Salary', ascending=False).groupby(['Bins', 'Name']).first().reset_index()

结果:

    Bins  Name  Salary
0  1980s   Ron    6800
1  1990s   Ron    8500
2  2000s  Hary    7000
3  2010s  John   21000

另一种方法是按['Bins', 'Name'] 分组并使用GroupBy.max()

df.groupby(['Bins', 'Name'], as_index=False)['Salary'].max()

同样的结果。

【讨论】:

【参考方案2】:

这应该可行:

df.groupby('Bins').max().reset_index()

【讨论】:

我仍然收到错误“将密钥添加到排除项”

以上是关于在python中查找多个组中的最大值的主要内容,如果未能解决你的问题,请参考以下文章

使用多个重复的最大日期时间检索每个组中的最大日期时间记录 - MySQL 问答

Python数据在二元组中的位置

根据列中的一组查找最大值行并在熊猫中进行透视

Python:删除每组中具有最大值的行

Python - 在数字列表中查找最大数字

用类求几个数组中的最大乘积