如何将Pandas列中的值替换为每个唯一值的随机数(随机分类)



我有一个df,其中有一列如下所示:

id   
11    
22
22
333
33
333

此列是敏感数据。我想用任何随机数替换每个值,但在相同的ID中,每个随机数都应该保持相同的数字。

例如,我想屏蔽列中的数据,如下所示:

id   
123   
987
987
456
00
456

请注意,相同的ID具有相同的值。我该如何做到这一点?我有成千上万的身份证。

我建议这样做:

from random import randint
df['id_rand'] = df.groupby('id')['id'].transform(lambda x: randint(1,1000))
>>> df
'''
id  id_rand
0   11      833
1   22      577
2   22      577
3  333      101
4   33      723
5  333      101

这里有两个选项,用于生成分类(非随机,id2(或每个原始ID生成唯一随机(id3(。在这两种情况下,我们可以使用pandas.factorize(或者可替换地uniquepandas.Categorical(。

# enumerated categorical
df['id2'] = pd.factorize(df['id'])[0]
# random categorical
import numpy as np
s,ids = pd.factorize(df['id'])
d = dict(zip(ids, np.random.choice(range(1000), size=len(ids), replace=False)))
df['id3'] = df['id'].map(d)
# alternative 1
ids = df['id'].unique()
d = dict(zip(ids, np.random.choice(range(1000), size=len(ids), replace=False)))
df['id3'] = df['id'].map(d)
# alternative 2
df['id3'] = pd.Categorical(df['id'])
new_ids = np.random.choice(range(1000), size=len(df['id3'].cat.categories), replace=False)
df['id3'] = df['id3'].cat.rename_categories(new_ids)

输出:

id  id2  id3
0   11    0  395
1   22    1  428
2   22    1  428
3  333    2  528
4   33    3  783
5  333    2  528

相关内容

  • 没有找到相关文章

最新更新