熊猫根据ID列生成一列随机数

时间:2020-09-14 19:51:59

标签: python pandas

我想根据DataFrame中的ID列生成1到n之间的随机数。此ID列中的重复值应具有相同的随机数。应该为一个以上的ID分配一个随机数,但是属于每个随机数的ID数应尽可能相等或最大。我还希望通过种子值来复制结果。

一个非常简单的示例,就是说我有一个ID列,其值为A,B,C,D,E。我想分配一个1到2的随机数。因此,在此示例中,将ID A,B,E分配给随机数1,将ID C,D分配给2。

ID   Random
A    1
C    2
A    1
B    1
E    1
D    2

此外,我的DataFrame非常大,因此速度非常重要。

更新:我之前尝试的是获取ID的唯一列表,然后为每个ID生成随机数,但是我制作了一个DataFrame并尝试合并两个DataFrame,这太耗时了。

2 个答案:

答案 0 :(得分:1)

感谢S3DEV,他建议将字典映射到该列,这要快得多。

ID_list = df['ID'].unique()
random_list = np.random.randint(1, 2, size=len(ID_list))
dic = {ID_list[i]: random_list[i] for i in range(len(ID_list))} 
df['Random'] = df['ID'].map(dic) 

答案 1 :(得分:0)

要修正您的方法(即创建侧面数据框):

n = 10

ids = df[["ID"]].drop_duplicates()
ids["Random"] = np.random.randint(1, n, len(ids))
ids.set_index("ID", inplace=True)
df.set_index("ID", inplace=True)
df["Random"] = ids["Random"]
df.reset_index(inplace=True)

输出:

  ID  Random
0  A       6
1  C       7
2  A       6
3  B       4
4  E       1
5  D       6
相关问题