Фрейм данных Python получает все перестановки в одном столбце - PullRequest
0 голосов
/ 28 июня 2018

У меня есть фрейм данных Python, содержащий список слов.

Column Name
 1. text1  
 2. text2
 3. text3

Мне нужно найти все перестановки из фрейма данных по 3 слова за раз в одном столбце, разделенном пробелом. Вывод должен выглядеть ниже.

    text1 text2 text3
    text1 text3 text2 
    text2 text3 text1
    text2 text1 text3
    text3 text2 text1
    text3 text1 text2

Любая помощь по этому вопросу приветствуется!

1 Ответ

0 голосов
/ 28 июня 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...