gpt4 book ai didi

python - 如何将列表中的随机值分配给同一行的另一列中不存在的新列?

转载 作者:行者123 更新时间:2023-12-03 19:07:59 24 4
gpt4 key购买 nike

我有一个大约 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com