我正在创建一个虚拟的数据库列表,其中包含公司列表作为user_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,这样就不会对特定的job_id重复c_id。
我的处理方法如下。 joblist是所有job_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'] ==工作清单[0]])
输出= 168
df ['c_id'] [df ['job_id'] ==工作清单[0]]。nunique()
输出= 101
,所有值都一样。我在每一步之后都重新检查了l
的唯一性及其168个唯一值。
我在这里做什么错了?
答案 0 :(得分:0)
基本pd
函数提供唯一的ID,因此您不需要花哨的东西。解决方案的效率因您的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)
How to assign a unique ID to detect repeated rows in a pandas dataframe?