Есть ли способ создать столбец фрейма данных pandas на основе текущей позиции сортировки и другого столбца?

#python #pandas #dataframe

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

Вопрос:

У меня есть несколько столбцов данных, и я хочу найти, где значение находится внутри его «класса», а также в целом.

Вот несколько примеров данных (давайте предположим, что «класс», который мы сравниваем, — это eye_color, а показатель — оценка):

 raw_data = {'name': ['Alex', 'Alicia', 'Omar', 'Louise', 'Alice'],
    'age': [20, 19, 35, 24, 32],
    'eye_color': ['blue', 'blue', 'brown', "green", "brown"],
    'score': [88, 92, 95, 70, 96]}
df = pd.DataFrame(raw_data)
df = df.sort_values(['eye_color', 'score'], ascending=[True, False])
 

Я хочу создать столбец, который будет использовать текущий порядок сортировки, чтобы присвоить значение «Brown1» для Алисы, «Brown2» для Омара, «Green1» для Луизы и т.д.

Я не уверен, как подойти, и я уверен, что есть простой способ сделать это, прежде чем я перепроектирую функцию, которая выполняет повторную сортировку на основе каждого класса, а затем воссоздает индекс или что-то в этом роде…

Ответ №1:

Использовать groupby().cumcount() :

 df['new'] = df['eye_color']   df.groupby('eye_color').cumcount().add(1).astype(str)
 

Вывод:

      name  age eye_color  score     new
1  Alicia   19      blue     92   blue1
0    Alex   20      blue     88   blue2
4   Alice   32     brown     96  brown1
2    Omar   35     brown     95  brown2
3  Louise   24     green     70  green1