Использование Pandas Rank для строк в DataFrameGroupBy - PullRequest
1 голос
/ 30 мая 2020

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

Давайте поместим матрицу в dict и поместим ее в DF:

matrix ={'Flow':['Flow1','Flow2','Flow3','Flow4','Flow6']*6,
     'User':['Jill','Jacky','Joanie','Peter','Paul','Paddy']*5,
     'Role':['Requestor','Manager','Approver']*10}
mydf=pd.DataFrame(matrix)

Это дает мне таблицу потоков, для которых есть три роли, каждая из которых может быть выполнена несколько возможных индивидуумов (здесь только двое, в реальности намного больше).

Для каждой пары поток / роль я хотел бы получить рейтинг по имени, чтобы мои данные выглядели так:

   Flow    User       Role      Rank
0   Flow1  Jill       Requestor 1
5   Flow1  Paddy      Approver  1
10  Flow1  Paul       Manager   1
15  Flow1  Peter      Requestor 2
20  Flow1  Joanie     Approver  2
25  Flow1  Jacky      Manager   2

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

Предположительно, это должно быть сделано с помощью groupby.rank ()

mydf['Rank']=mydf.groupby(['Flow','Role'])['User'].rank(method='dense')

, но это возвращает объект 'NoneType' не вызывается ошибка. Моя конечная цель - развернуть матрицу, чтобы каждая роль была представлена ​​в столбце, но мне действительно нужен этот рейтинг, чтобы иметь возможность представлять данные для всех пользователей.

Пожалуйста, скажите мне, что я делаю не так, возможно, мне нужно вместо этого использовать .apply (), хотя не знаю, как это сделать.

1 Ответ

0 голосов
/ 30 мая 2020

Вы можете использовать .groupby вместе с .cumcount:

mydf['Rank'] = mydf.groupby(['Flow','Role'])['User'].cumcount().add(1)

Результат:

# print(mydf[mydf['Flow'].eq('Flow1')])

    Flow    User       Role  Rank
0   Flow1    Jill  Requestor     1
5   Flow1   Paddy   Approver     1
10  Flow1    Paul    Manager     1
15  Flow1   Peter  Requestor     2
20  Flow1  Joanie   Approver     2
25  Flow1   Jacky    Manager     2
...