Я работаю над организационной матрицей и пытаюсь воспроизвести задачу в 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 (), хотя не знаю, как это сделать.