【发布时间】:2020-05-30 09:02:58
【问题描述】:
我正在研究一个组织矩阵,并试图在 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' object is not callable 错误。 我的最终目标是旋转矩阵以使每个角色在一列中表示,但我确实需要这个排名才能代表所有用户的数据。
请告诉我我做错了什么,也许我需要使用 .apply() 代替,但不确定如何。
【问题讨论】:
-
“按名称排名”是什么意思 - 按字母顺序排列?如果是这样,您提供的示例输出似乎没有这样做。
标签: python-3.x pandas pandas-groupby