Python 熊猫基于ID列生成一列随机数
我想根据数据帧中的ID列生成从1到n的随机数。此ID列中的重复值应具有相同的随机数。应为多个ID分配一个随机数,但属于每个随机数的ID数应尽可能相等或最相等。我还想要一个种子值,这样我可以复制结果 一个非常简单的例子是,假设我有一个ID列,其值为A、B、C、D、E。我想分配一个1到2的随机数。所以在这个例子中,IDs A,B,E将被分配给随机数1,IDs C,D分配给2Python 熊猫基于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 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,并将它们映射到列中。不用担心,伙计,很高兴这有帮助。(请随意选择我的任何其他答案)。;-)