Itertools отлично подходит для этого! В частности, itertools.permutations
:
import itertools as it
df = pd.DataFrame({'col': ['text1', 'text2', 'text3']})
perms = it.permutations(df.col)
Это дает вам генератор, perms
, который будет давать вам следующую перестановку каждый раз, когда вы вызываете next(perms)
, то, что вещи вроде for perm in perms:
или [perm for perm in perms]
делают автоматически.
Обратите внимание, что если у вас есть более трех элементов в вашем фрейме данных, но вы хотите перестановок по три за раз, вы должны использовать it.permutations(df.col, 3)
в приведенном выше. Также обратите внимание, что вы получите ТОНН перестановок, если у вас много элементов в вашем фрейме данных. Это биномиальное «количество перестановок равно n выбрать k», или N = n! / (k! * (n - k)!)
.
Вы можете получить желаемый формат вывода, например:
result = '\n'.join([' '.join([s for s in perm]) for perm in perms])
print(result)
text1 text2 text3
text1 text3 text2
text2 text1 text3
text2 text3 text1
text3 text1 text2
text3 text2 text1