Python 3.x 在DataFrameGroupBy中使用字符串排序
我正在研究一个组织矩阵,并试图用Python重现一个任务,通常使用MS Access来完成这个任务效率很低。这个问题可能有一个简单的答案,但我在任何地方都找不到,如果这个问题已经得到了回答,我表示歉意 让我们在dict中放置一个矩阵,并将其放在DF中:Python 3.x 在DataFrameGroupBy中使用字符串排序,python-3.x,pandas,pandas-groupby,Python 3.x,Pandas,Pandas Groupby,我正在研究一个组织矩阵,并试图用Python重现一个任务,通常使用MS Access来完成这个任务效率很低。这个问题可能有一个简单的答案,但我在任何地方都找不到,如果这个问题已经得到了回答,我表示歉意 让我们在dict中放置一个矩阵,并将其放在DF中: matrix ={'Flow':['Flow1','Flow2','Flow3','Flow4','Flow6']*6, 'User':['Jill','Jacky','Joanie','Peter','Paul','Paddy']*5
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()来完成
但这将返回一个“非类型”对象不可调用的错误。
我的最终目标是调整矩阵,使每个角色都在一列中表示,但我确实需要这个排名,以便能够表示所有用户的数据
请告诉我我做错了什么,也许我需要使用.apply(),但不确定如何使用。您可以使用,以及:
结果:
# 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
你所说的“按姓名排名”——按字母顺序排列是什么意思?如果是这样的话,您提供的示例输出似乎不是这样的。谢谢,这正是我所需要的!
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