#python #pandas #dataframe #group-by
Вопрос:
Я пытаюсь найти самую высокую зарплату в течение каждого десятилетия для каждого данного имени. Ниже приведен мой пример набора данных и строка кода
| 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. Дайте мне знать, работает ли мое решение для вас или нуждается в какой-либо доработке. Спасибо!
Ответ №1:
Это должно сработать:
df.groupby('Bins').max().reset_index()
Комментарии:
1. Я все еще получаю сообщение об ошибке «Добавить ключ к исключениям».
Ответ №2:
Вы можете группировать ['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()
Тот же результат.