Python 熊猫基于ID列生成一列随机数

Python 熊猫基于ID列生成一列随机数,python,pandas,Python,Pandas,我想根据数据帧中的ID列生成从1到n的随机数。此ID列中的重复值应具有相同的随机数。应为多个ID分配一个随机数,但属于每个随机数的ID数应尽可能相等或最相等。我还想要一个种子值,这样我可以复制结果 一个非常简单的例子是,假设我有一个ID列,其值为A、B、C、D、E。我想分配一个1到2的随机数。所以在这个例子中,IDs A,B,E将被分配给随机数1,IDs C,D分配给2 ID Random A 1 C 2 A 1 B 1 E 1 D 2 另外,我有一个非

我想根据数据帧中的ID列生成从1到n的随机数。此ID列中的重复值应具有相同的随机数。应为多个ID分配一个随机数,但属于每个随机数的ID数应尽可能相等或最相等。我还想要一个种子值,这样我可以复制结果

一个非常简单的例子是,假设我有一个ID列,其值为A、B、C、D、E。我想分配一个1到2的随机数。所以在这个例子中,IDs A,B,E将被分配给随机数1,IDs C,D分配给2

ID   Random
A    1
C    2
A    1
B    1
E    1
D    2
另外,我有一个非常大的数据帧,所以速度非常重要


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

多亏了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) 
要修复您的方法(即创建端数据帧):

n=10
ids=df[[“ID”]]。删除重复项()
ids[“Random”]=np.Random.randint(1,n,len(ids))
ID.set_索引(“ID”,inplace=True)
df.set_索引(“ID”,原地=真)
df[“Random”]=ids[“Random”]
df.reset_索引(原地=真)
产出:

ID随机
0 A 6
1 C 7
2 A 6
3 B 4
4 E 1
5天6

您能否更新问题以显示您迄今为止的尝试/研究成果?一开始,我会说用
{id:num}
对来包装一个dict,并将它们映射到列中。不用担心,伙计,很高兴这有帮助。(请随意选择我的任何其他答案)。;-)