совет piRSquared хорош. Нам остается гадать, что решать.
Только что просмотрев некоторые из последних оставшихся без ответа вопросов о пандах, они стали еще хуже.
import pandas as pd
import numpy as np
#some redundancy here as i make an empty dataframe -pretending i start like you with a Dataframe.
df = pd.DataFrame(index = range(11),columns=list('abcdefg'))
num_cells = np.product(df.shape)
# make a 2-dim array with number from 1 to number cells.
arr =np.arange(1,num_cells+1)
#inplace shuffle - this is the key randomization operation
np.random.shuffle(arr)
arr = arr.reshape(df.shape)
#place the shuffled values, normalized to the number of cells, into my dateframe.
df = pd.DataFrame(index = df.index,columns = df.columns,data=arr/np.float(num_cells))
#use applymap to set keep 40% of cells as ones, the other 60% as nan.
df = df.applymap(lambda x: 1 if x > 0.6 else np.nan)
# now sample a full set from normal distribution
# but when multiplying the nans will cause the sampled value to nullify, whilst the multiply by 1 will retain the sample value.
df * np.random.normal(1000,500,df.shape)
Таким образом, у вас остается 40% случайных ячеек, содержащих ничью из вашего обычного распределения.
Если ваш фрейм данных был большим, вы можете предполагать стабильность функции равномерного rand (). Здесь я этого не делал и довольно точно определил, сколько ячеек выше и ниже порога.