У меня есть фрейм данных, который выглядит следующим образом (см. Прикрепленное изображение).
Я хочу добиться очень простой вещи: перетасовать строки этого фрейма данных, но с ограничением, что числа в ' Столбец «Идентичность» никогда не появляется дважды подряд (например, если бы у нас была последовательность 112233, это было бы приемлемым тасованием: 123123, но это не будет: 12 33 21, потому что появляются два числа 3 подряд).
Моя «самая успешная» попытка на данный момент заключается в следующем:
def shuffling(x):
spreadsheetEmpty = pd.DataFrame(columns=['NeutralImage', 'EmotionalImage', 'Group', 'Condition', 'Emotion', 'Identity', 'Gender', 'trigger']) #Create an empty data frame - same columns as the original
for index in range(0,len(x)-1):
while x['Identity'].iloc[index] == x['Identity'].iloc[index+1]: #if the identity in that row is the same as in the next one, shuffle again
x = x.sample(frac=1).reset_index(drop=True
else: #If we don't have two identities right next to each other:
spreadsheet_final = spreadsheetEmpty.append(x) #Fill in the empty spreadsheet from the beginning with a pseudorandomized one
return(spreadsheet_final)
Однако с помощью этого кода я не достигаю того, чего хочу, потому что он гарантирует, что только первые два числа не повторяются рядом друг с другом и игнорируют остальные значения в столбце.
Есть ли у кого-нибудь предложения, как эту функцию можно изменить, чтобы проверить все строки в кадре данных на предмет повторения ?
Заранее спасибо!
Изображение фрейма данных