我有一个大约50k行的数据集,其中包含某个作业ID和执行该作业的人员的用户ID。它由我创建的示例表示:
df = pd.DataFrame(data={
'job_id': ['00001', '00002', '00003', '00004', '00005', '00006', '00007', '00008', '00009', '00010', '00011', '00012', '00013', '00014', '00015'],
'user_id': ['frank', 'josh', 'frank', 'jessica', 'josh', 'eric', 'frank', 'josh', 'eric', 'jessica', 'jessica', 'james', 'frank', 'josh', 'james']
})
job_id user_id
0 00001 frank
1 00002 josh
2 00003 frank
3 00004 jessica
4 00005 josh
5 00006 eric
6 00007 frank
7 00008 josh
8 00009 eric
9 00010 jessica
10 00011 jessica
11 00012 james
12 00013 frank
13 00014 josh
14 00015 james
我希望在一个名为“reviewer_id”的新列中为这些工作分配同行评论员,其中评论员来自用户id列表,但不能是相同的user_id
。例如:frank
不能回顾自己的工作,但jessica
可以
我想要的输出是这样的:
job_id user_id reviewer_id
0 00001 frank jessica
1 00002 josh frank
2 00003 frank josh
3 00004 jessica eric
4 00005 josh james
...
11 00012 james frank
12 00013 frank josh
13 00014 josh eric
14 00015 james eric
我对python非常陌生,所以我只能考虑从reviewers = df['user_id'].unique().tolist()
获取一个唯一的user_id
列表,并在数据帧上迭代并分配一个审阅者ID,但我知道您通常不应该在数据帧上迭代。所以我不知道该怎么做
我能想到的最简单的方法是不断更换评论者,直到没有人评论他们自己的作品:
就性能而言,当有更多不同的用户时,代码运行得更快。下面是一个更快的版本(对于walrus
:=
操作符需要Python 3.8):您可以使用pandas
apply
根据用户的值检查两个随机审阅者选择,然后返回第一个不是用户的审阅者您可以将
apply
与set
一起使用:输出:
相关问题 更多 >
编程相关推荐