在特定类别的范围内为pandas datafram分配一个随机数

2024-06-26 13:51:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来像这样:

0     Fish     Trout      
1     Fish  Pickerel      
2     Fish      Pike      
3     Bird     Goose      
4     Bird      Duck   

我想给fish对应的条目分配一个介于5到45之间的随机数,为birds对应的条目分配一个介于55和95之间的随机数(这里的逻辑是生成一个数值,这样我就可以根据bokeh或seaborn中的其他数字标准来绘制这个值)。在

我已经做到了:

设置变量以表示随机数生成的范围

^{pr2}$

在字典中使用上述变量并将其映射到从Category列映射的新列

d = {'Bird': Num_Bird, 'Fish': Num_Fish}
data['Random'] = data['Category'].map(d)

上面的问题是,它给所有的鱼分配相同的随机数,给所有的鸟分配一个不同的随机数。我想要的是每种鱼或鸟的唯一随机数(在指定的范围内)。在

所以目前它会产生这样的结果:

0     Fish     Trout      22
1     Fish  Pickerel      22
2     Fish      Pike      22
3     Bird     Goose      53
4     Bird      Duck      53

如何为每个类别中的单独条目获取唯一的随机数(在指定的范围内)?在

除此之外,在大数据集的情况下,有没有避免重复随机数的方法?在

如有任何建议,将不胜感激。。。谢谢


Tags: 数据data条目逻辑numcategoryduckfish
2条回答
from io import StringIO
import numpy as np
import pandas as pd


df = pd.read_csv(StringIO('''ID,ClassLevel0,ClassLevel1
0,Fish,Trout      
1,Fish,Pickerel      
2,Fish,Pike      
3,Bird,Goose      
4,Bird,Duck
'''))
df.index = df.ID

random_param = {'Fish': (5, 45), 'Bird': (55, 95)}


for level0, ldf in df.groupby('ClassLevel0'):
    df.loc[ldf.index, 'Value'] = np.random.randint(*random_param[level0], len(ldf))

map和adict

dct = {'Bird': [55, 95], 'Fish': [5, 45]}

def map_animal(animal):
    return np.random.randint(*dct[animal])

df['rand_num'] = df.Type.map(map_animal)

   Type      Name  rand_num
0  Fish     Trout        25
1  Fish  Pickerel        18
2  Fish      Pike        44
3  Bird     Goose        56
4  Bird      Duck        74

相关问题 更多 >