生成具有60%0和40%1的伪数据

时间:2019-09-17 08:26:43

标签: python pandas

我想在我的数据框df中生成一个新列,该列只能采用两个值,即0或1。我的数据框当前也有1000列,并且还有其他列。我想以这样一种方式生成0和1:该列中60%的值是0,其余40%是1。

我做了以下事情:

generated_data = []
    for index, row in df.iterrows():

      if index <= len(df) * 0.6 :
        generated_data.append(0)


      else : 
        generated_data.append(1)

问题是:如何随机实现。在我的代码中,行的前60%为0,其余为1。我想在创建中实现随机性。

谢谢

2 个答案:

答案 0 :(得分:3)

如果需要,将numpy.random.choicep参数一起使用,则每个值都有60%的机会成为0,有40%的机会成为1

对于60%0和40%1使用numpy.random.shuffle.,并在此之前生成所有可能的值:

import numpy as np
np.random.seed(123)

df = pd.DataFrame({'a':range(1000)})
#print (df)

arr = np.ones(len(df))
arr[:int(len(df) * 0.6)] = 0
np.random.shuffle(arr)

df['new1'] = arr
df['new2'] = np.random.choice([0, 1], size=len(df), p=(0.6, 0.4))

print (df['new1'].value_counts())
0.0    600
1.0    400
Name: new1, dtype: int64

print (df['new2'].value_counts())
0    601
1    399
Name: new2, dtype: int64

答案 1 :(得分:3)

如果您恰好需要0的60%和1的40%,则可以首先使用np.onesnp.zeros创建列,然后shuffle创建该列:

import numpy as np

generated_data = np.concatenate([np.zeros(600), np.ones(400)])
np.random.shuffle(generated_data)
print(generated_data)