#python #pandas
#python #pandas
Вопрос:
Допустим, у меня есть следующий фрейм данных:
ID Color
1 Red
2 Yellow
1 Green
3 Red
1 Green
2 Red
И давайте предположим, что приоритет цветов следующий:
Green > Yellow > Red
Я хочу удалить строки с повторяющимися идентификаторами, сохранив ту, для которой цвет имеет наивысший приоритет. Итак, для этого примера я хотел бы получить этот результат:
ID Color
1 Green
2 Yellow
3 Red
Есть идеи, как я могу достичь этого с помощью функций pandas? Я провел много исследований в Интернете, включая документацию pandas, но не смог придумать хорошего подхода. Любая помощь была бы высоко оценена.
Комментарии:
1. для вашего примера предположим, что ID равен индексу
df.Color.sort_index().drop_duplicates(keep='last')
, будет работать
Ответ №1:
Вы можете сделать это по крайней мере двумя способами, после того как вы установили свои цвета в категорию dtype с упорядочением.
df['Color'] = pd.Categorical(df['Color'], categories=['Red','Yellow','Green'], ordered=True)
Вариант 1:
df.sort_values('Color', ascending=False).drop_duplicates(['ID'])
Вывод:
ID Color
4 1 Green
1 2 Yellow
3 3 Red
Вариант 2:
df.groupby('ID')['Color'].max()
Вывод:
ID
1 Green
2 Yellow
3 Red
Name: Color, dtype: object
Комментарии:
1. Есть другой способ изменить 🙂 кстати, все еще думаю, что
Categorical
это аккуратно 🙂2. Большое спасибо за советы. Нужно попробовать и посмотреть, как это работает
Ответ №2:
Возможно, вам потребуется использовать map
, создайте свой собственный порядок dict
и drop_duplicates
df.iloc[df.Color.map({'Red':0,'Yellow':1,'Green':2}).argsort()].drop_duplicates('ID',keep='last')
Out[607]:
ID Color
3 3 Red
1 2 Yellow
4 1 Green