Python random.shuffle不会为数据帧提供精确的唯一值

2024-09-30 19:28:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个虚拟的数据集,其中列出了作为用户id的公司列表,每个公司发布的工作作为job id,而c id作为候选人id。 我已经完成了前两个步骤,我的数据集如下所示

user_id         job_id
0   HP          HP2
1   Microsoft   Microsoft4
2   Accenture   Accenture2
3   HP          HP0
4   Dell        Dell4
5   FIS         FIS1
6   HP          HP0
7   Microsoft   Microsoft4
8   Dell        Dell2
9   Accenture   Accenture0

它们也被洗牌。现在我希望向这个数据集中添加一个随机的候选id,这样就不会对特定的作业id重复任何c\U id

我的方法如下。 作业列表是所有作业ID的列表

for i in range(50):
    l = list(range(0,len(df[df['job_id'] == joblist[i]])))
    random.shuffle(l)
    df['c_id'][df['job_id'] == joblist[i]] = l

之后我把它测试为

len(df['c_id'][df['job_id'] == joblist[0]])

输出=168

df['c_id'][df['job_id'] == joblist[0]].nunique()

输出=101

所有的价值观都是如此。我重新检查了每个步骤后l的唯一性及其168个唯一值。 我做错什么了


Tags: 数据iddf列表作业步骤job公司
1条回答
网友
1楼 · 发布于 2024-09-30 19:28:08

唯一的id由基本的pd函数提供,所以您不需要任何花哨的东西。解决方案的效率因df的大小而异

# Hashing for small datasets:
df['new_id'] = pd.factorize(df.apply(tuple, axis=1))[0] + 1

# Grouping for larger datasets:
df['new_id'] = df.groupby(df.columns.tolist(), sort=False).ngroup() + 1

# Assign:
df.assign(id=(#Some combo of columns).astype('category').cat.codes)

进一步阅读: Q: [Pandas] How to efficiently assign unique ID to individuals with multiple entries based on name in very large df

How to assign a unique ID to detect repeated rows in a pandas dataframe?

相关问题 更多 >