我的数据框看起来像这样:
0 Fish Trout
1 Fish Pickerel
2 Fish Pike
3 Bird Goose
4 Bird Duck
我想将5到45之间的随机数分配给对应于鱼的条目,并将55到95之间的随机数分配给对应于鸟类的条目(这里的逻辑是生成一个数值,这样我就可以将其与散景或海洋中的其他数字标准进行对比。
我已经走到这一步了:
Num_Fish = np.random.randint(5, 45)
Num_Bird = np.random.randint(55, 95)
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
如何为每个类别中的单独条目获取唯一的随机数(在指定的范围内)?
除此之外,有没有办法避免在大型数据集的情况下重复随机数?
非常感谢任何建议......谢谢
答案 0 :(得分: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))
答案 1 :(得分:-1)
map
和 dict
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