Сортировка и извлечение фрейма данных pandas на основе пользовательской иерархии

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

Допустим, у меня есть фрейм данных следующим образом:

 import pandas as pd
df = pd.DataFrame({
    'brand': ['Yum_Yum', 'Yum_Yum', 'Indomie', 'Indomie', 'Indomie', 'Boom_Boom', 'Boom_Boom'],
    'style': ['cup', 'box', 'cup', 'pack', 'pack', 'pack', 'pack'],
    'rating': [4, 4, 3.5, 15, 5, 2.3, 0]
})
 

Я определяю иерархию так #hierarchy --> 1 = pack, 2 = cup, 3= box , где pack имеет наивысший приоритет, а box — самый низкий. Я хочу сохранить только один экземпляр каждого уникального значения в столбце бренда. Этот экземпляр должен иметь наивысшее значение приоритета на основе моей иерархии. Если есть связи, то их можно разделить случайным образом.

Таким образом, результирующий фрейм данных будет выглядеть примерно так:

 brand   style   rating
Yum_Yum cup 4.0
Indomie pack    5.0
Boom_Boom   box 2.3
 

Ответ №1:

Попробуйте сопоставить стиль с приоритетом, отсортировать и удалить дубликаты:

 priority = {'cup':2, 'box':3, 'pack':1}
df['style_rank'] = df['style'].map(priority)
df.sort_values('style_rank').drop_duplicates('brand')
 

Вывод:

        brand style  rating  style_rank
3    Indomie  pack    15.0           1
5  Boom_Boom  pack     2.3           1
0    Yum_Yum   cup     4.0           2
 

Комментарии:

1. о, это прекрасно, я ожидал, что это будет что-то в этом роде.

2. Я приму ответ, как только смогу. 9 минут