作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个大约 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”的新列中为这些作业分配同行审阅者,其中审阅者来自 user_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 很陌生,所以我只能想得到一个独特的列表
user_id
来自
reviewers = df['user_id'].unique().tolist()
并迭代数据帧并分配一个审阅者 ID,但我知道你通常不应该迭代 Pandas 数据帧。所以我不知道如何去做这样的事情。
最佳答案
我能想到的最简单的方法是不断更换审稿人,直到没有人评论自己的作品:
users = df['user_id'].unique()
df['reviewer_id'] = df['user_id']
self_review = lambda: df['reviewer_id'] == df['user_id']
while self_review().any():
reviewers = np.random.choice(users, len(df))
df['reviewer_id'] = df['reviewer_id'].mask(self_review(), reviewers)
在性能方面,当有更多不同的用户时,代码运行得更快。这是一个更快的版本(海象
:=
运算符需要 Python 3.8):
users = df['user_id'].unique()
df['reviewer_id'] = df['user_id']
while (self_review := df['user_id'] == df['reviewer_id']).any():
reviewers = np.random.choice(users, self_review.sum())
df.loc[self_review, 'reviewer_id'] = reviewers
关于python - 如何将列表中的随机值分配给同一行的另一列中不存在的新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63058144/
我是一名优秀的程序员,十分优秀!