对于每个雇员,将有一个随机的子雇员,在这种情况下,当我尝试运行此程序时,同一子雇员会为其他雇员一次又一次地重复。我该怎么办?它不应该重复
{“can_place_on”;[“diamond_block”]}
答案 0 :(得分:0)
Dataframe.sample()
仅是一种采样技术,其中n = 3的采样都是唯一的。在这种情况下,您每次都会生成n = 1的样本,并且每一代都是彼此独立的,因此您将不会获得唯一的项。
一种生成非重复随机数的方法是使用range(n)
创建一个列表,然后使用random.shuffle()
对该列表进行混洗。现在您有了随机数列表,可以使用list.pop()
示例:
import numpy as np
from pandas import Series,DataFrame
CHCbot_Emp = DataFrame({'Employee_Name':['Deepak','Varadharajan','Akash','Jeffrin','Ashwini','Sathish','Vikram','Narasiman','satyavathi'],
'Employee_Code':['IS4001','IS4002','IS4003','IS4004','IS4005','IS4006','IS4007','IS4008','IS4009']})
CHCbot_Emp
l = list(range(len(CHCbot_Emp)))
np.random.shuffle(l)
for rows in CHCbot_Emp.itertuples(index=False):
print(rows.Employee_Name+" "+rows.Employee_Code)
print('Hey '+rows.Employee_Name+'!!! Pick your Child')
random_Variable = CHCbot_Emp.iloc[l.pop()]
print(random_Variable.Employee_Code+" "+random_Variable.Employee_Name)
在这里,我使用dataframe.iloc[l.pop()]
来获取您的随机数据帧行。
另一种选择是使用random.sample()而不是.shuffle()
l = random.sample(list(range(len(CHCbot_Emp))),len(CHCbot_Emp))