#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