Панды группового и ранга в группах, которые начинаются с 1 для каждой группы - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть фрейм данных:

импорт панд в виде pd

df = pd.DataFrame([[1, 'a'],
                    [1, 'a'],
                    [1, 'b'],
                    [1, 'a'],
                    [2, 'a'],
                    [2, 'b'],
                    [2, 'a'],
                    [2, 'b'],
                    [3, 'b'],
                    [3, 'a'],
                    [3, 'b'],

                   ], columns=['session', 'issue'])
df

enter image description here

Я бы хотел ранжировать проблемы в рамках сессий,Я пробовал с:

df.groupby(['session', 'issue']).size().rank(ascending=False, method='dense')

session  issue
1        a        1.0
         b        3.0
2        a        2.0
         b        2.0
3        a        3.0
         b        2.0
dtype: float64

Мне нужен вот такой результат:

  1. для групповой сессии = 1, есть три проблемы и одна проблема b, поэтому для группы1, ранги a = 1 и b = 2
  2. для групповой сессии = 2, оба ранга равны, поэтому их ранг должен быть одинаковым = 1
  3. для групповой сессии = 3, естьна b вопросов, а один на проблему, поэтому ранги должны быть b = 1 и a = 2

В любом случае, почему для каждой группы ранги не начинаются с 1, 2, 3 ...?

1 Ответ

0 голосов
/ 05 февраля 2019

Используйте DataFrameGroupBy.rank по первому уровню MultiIndex (session):

s = (df.groupby(['session', 'issue'])
        .size()
        .groupby(level=0)
        .rank(ascending=False, method='dense'))
print (s)
session  issue
1        a        1.0
         b        2.0
2        a        1.0
         b        1.0
3        a        2.0
         b        1.0
dtype: float64
...