我有这个数据框:
np.random.seed(0)
N = 10000
N_Seg = 100
df = pd.DataFrame({"Rut_Num": range(1,N+1),
"Segmento": np.random.choice(
["Afluente", "Afluente","Premium", "Preferente", "Preferente", "Preferente", "Preferente", "Clásico", "Clásico", "Clásico", "Clásico", "Clásico", "Clásico"], N),
"If_Seguro": np.random.choice([0,1,1], N)})
df.head()
Rut_Num Segmento If_Seguro
0 1 Clásico 1
1 2 Preferente 0
2 3 Afluente 0
3 4 Preferente 0
4 5 Clásico 1
当If_Seguro
列为1时,我需要一个介于1和N_Seg+1
之间的随机数,如果其为0,则我需要一个0:
np.random.seed()
df.loc[:,"id_Seguro"] = np.where(df["If_Seguro"] == 1, np.random.choice(range(1,N_Seg+1),1),0)
df["id_Seguro"].value_counts()
[当我需要np.where()
的每个1的随机数时,您会发现If_Seguro
的真条件将为所有数字赋予相同的数字>
此外,为什么np.where()
对于整个列只计算一次np.random.choice()
,而对于列中的每个验证(每行)却不计算呢?
我有此数据帧:np.random.seed(0)N = 10000 N_Seg = 100 df = pd.DataFrame({“ Rut_Num”:range(1,N + 1),“ Segmento”:np.random.choice ([[“ Afluente”,“ Afluente”,“ ...
将size
中的参数np.random.choice
用于具有相同大小的数组,例如DataFrame
的行数。
np.where(df["If_Seguro"] == 1, np.random.choice(range(1,N_Seg+1),1),0)
表示我认为经常遇到但通常不受欢迎的where
使用。该解决方案还将回答您有关为何仅生成一个值的问题。