2015-11-24 3 views
5

Рассмотрите информационный кадр с тремя колонками: group_ID, item_ID и value. Скажем, у нас есть 10 itemIDs всего.Порядок оценки для каждой группы в Pandas

мне нужно ранжировать каждый item_ID (от 1 до 10) в каждый group_ID на основе value, а затем посмотреть, средний ранг (и другие статистические данные) между группами (например, идентификаторы с высшей значения по группам будет получить ранжирование ближе к 1). Как я могу это сделать в Pandas?

This answer делает что-то очень близко с qcut, но не совсем то же самое.


Пример из данных будет выглядеть следующим образом:

 group_ID item_ID value 
0 0S00A1HZEy  AB  10 
1 0S00A1HZEy  AY  4 
2 0S00A1HZEy  AC  35 
3 0S03jpFRaC  AY  90 
4 0S03jpFRaC  A5  3 
5 0S03jpFRaC  A3  10 
6 0S03jpFRaC  A2  8 
7 0S03jpFRaC  A4  9 
8 0S03jpFRaC  A6  2 
9 0S03jpFRaC  AX  0 

, который приведет:

 group_ID item_ID rank 
0 0S00A1HZEy  AB  2 
1 0S00A1HZEy  AY  3 
2 0S00A1HZEy  AC  1 
3 0S03jpFRaC  AY  1 
4 0S03jpFRaC  A5  5 
5 0S03jpFRaC  A3  2 
6 0S03jpFRaC  A2  4 
7 0S03jpFRaC  A4  3 
8 0S03jpFRaC  A6  6 
9 0S03jpFRaC  AX  7 
+0

Вы можете использовать функцию 'rankdata' из' scipy.stats' для ранжирования ваших данных. Затем он становится упражнением для правильной группировки и применения этой функции к кадру данных. – Olaf

+0

Спасибо @DSM Я был в середине редактирования сообщения. Я думаю, что последние рейтинги верны. –

+0

Да! @DSM Извините, я только что исправил это. Благодарю. –

ответ

8

Есть много различных аргументов, вы можете передать в rank; это выглядит, как вы можете использовать rank("dense", ascending=False), чтобы получить результаты, которые вы хотите, после выполнения groupby:

>>> df["rank"] = df.groupby("group_ID")["value"].rank("dense", ascending=False) 
>>> df 
    group_ID item_ID value rank 
0 0S00A1HZEy  AB  10  2 
1 0S00A1HZEy  AY  4  3 
2 0S00A1HZEy  AC  35  1 
3 0S03jpFRaS  AY  90  1 
4 0S03jpFRaS  A5  3  5 
5 0S03jpFRaS  A3  10  2 
6 0S03jpFRaS  A2  8  4 
7 0S03jpFRaS  A4  9  3 
8 0S03jpFRaS  A6  2  6 
9 0S03jpFRaS  AX  0  7 

Но учтите, что если вы не используете глобальную схему ранжирования, выяснить средний ранг между группами не очень значимый - если в группе нет повторяющихся значений (и поэтому у вас есть повторяющиеся значения ранга), вы измеряете количество элементов в группе.

Смежные вопросы