我正在研究组织矩阵,并试图用Python重现通常使用MS Access效率很低的任务。对于这个问题可能有一个简单的答案,但是我无法在任何地方找到它,如果已经解决了,抱歉。
让我们在字典中放置一个矩阵并将其放入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(),但不确定如何使用。