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

时间:2018-11-29 13:53:04

标签: python pandas random

我正在创建一个虚拟的数据库列表,其中包含公司列表作为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个唯一值。 我在这里做什么错了?

1 个答案:

答案 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)

进一步阅读: 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?