我想在我的数据框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。我想在创建中实现随机性。
谢谢
答案 0 :(得分:3)
如果需要,将numpy.random.choice
与p
参数一起使用,则每个值都有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.ones
和np.zeros
创建列,然后shuffle
创建该列:
import numpy as np
generated_data = np.concatenate([np.zeros(600), np.ones(400)])
np.random.shuffle(generated_data)
print(generated_data)