#python #pandas
Вопрос:
Следующий набор данных содержит контейнеры с конкретными элементами, имеющими определенный приоритет.
container item_No Priority
1 123 A
1 124 B
1 142 D
2 516 C
2 142 D
3 516 C
3 124 B
3 123 A
Я хотел бы иметь набор данных, в котором, если в контейнере есть какие-либо элементы с приоритетом «А», то уровень приоритета для всего контейнера равен «А». Если A нет, проверьте наличие B, а затем установите уровень приоритета «B». Если «B» нет, проверьте «C». и так далее, и тому подобное…
Я хотел бы получить следующий df в качестве вывода.
container Priority
1 A
2 C
3 A
Ответ №1:
Сначала преобразуйте столбец для упорядоченных категорий с указанием порядка, а затем агрегируйте min
:
df['Priority'] = pd.Categorical(df['Priority'], ordered=True, categories=['A','B','C','D'])
df = df.groupby('container', as_index=False)['Priority'].min()
print (df)
container Priority
0 1 A
1 2 C
2 3 A
Если работать с буквами, как ABCD
в порядке по умолчанию, решение проще:
df = df.groupby('container', as_index=False)['Priority'].min()
Комментарии:
1. Это приятно знать, я только что придумал A B C D, например, метки приоритетов на самом деле arbritary.