У меня сейчас проблема с псевдослучайным распределением моих испытаний. Я использую некоторое время l oop, чтобы создать 12 файлов, содержащих 38 строк (или испытаний), которые соответствуют 1 критерию:
1) max color1expl
не может быть одинаковым в 3 последовательных строках
Где color1expl
- один из столбцов в моем фрейме данных.
Когда у меня есть файлы только для 38 строк, следующий скрипт, кажется, работает отлично.
import pandas as pd
n_dataset_int = 0
n_dataset = str(n_dataset_int)
df_all_possible_trials = pd.read_excel('GroupF' + n_dataset + '.xlsx') # this is my dataset with all possible trials
# creating the files
for iterations in range(0,12): #I need 12 files with pseudorandom combinations
n_dataset_int += 1 #this keeps track of the number of iterations
n_dataset = str(n_dataset_int)
df_experiment = df_all_possible_trials.sample(n=38) #38 is the total number of trials
df_experiment.reset_index(drop=True, inplace=True)
#max color1expl cannot be identical in 3 consecutive trials (maximum in 2 consecutive t.)
randomized = False
while not randomized: #thise while loop will make every time a randomization of the rows in the dataframe
experimental_df_2 = df_experiment.sample(frac=1).reset_index(drop=True)
for i in range(0, len(experimental_df_2)):
try:
if i == len(experimental_df_2) - 1:
randomized = True
elif (experimental_df_2['color1expl'][i] != experimental_df_2['color1expl'][i+1]) or (experimental_df_2['color1expl'][i] != experimental_df_2['color1expl'][i+2])
continue
elif (experimental_df_2['color1expl'][i] == experimental_df_2['color1expl'][i+1]) and (experimental_df_2['color1expl'][i] == experimental_df_2['color1expl'][i+2]):
break
except:
pass
#export the excel file
experimental_df_2.to_excel('GroupF_r' + n_dataset + '.xlsx', index=False) #creates a new
Однако при выполнении той же процедуры увеличения числа с n=38
до n=228
сценарий запускается неопределенное количество времени. Пока что прошло больше одного дня и он не выдал ни одного из 12 файлов. Возможно, потому что слишком много комбинаций, чтобы попробовать.
Есть ли способ улучшить этот скрипт, чтобы он работал с большим количеством строк?