Вычислить все перестановки списка в столбце фрейма данных

Я пытаюсь вычислить все перестановки списка или столбца в df, сохраняя при этом столбец id.

input df
    id    list
    1     foo bar
    2     dog cat

desired df output
    id    list
    1     foo bar
    1     bar foo
    2     dog cat
    2     cat dog

Является ли значение В самом деле'foo bar' или ['foo', 'bar']?

Alexander 29.05.2019 03:00
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
163
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

IIUC просто использует permutations из itertools, тогда это раскинуть гнездо

df['list']=df['list'].str.split(' ')
import itertools
df['list']=[list(itertools.permutations(x)) for x in df['list']]
pd.DataFrame({'id':df.id.repeat(df['list'].str.len()),'list':np.concatenate(df['list'].values).tolist()})
Out[522]: 
   id        list
0   1  [foo, bar]
0   1  [bar, foo]
1   2  [dog, cat]
1   2  [cat, dog]

@leo нет, ты не можешь :-)

BENY 29.05.2019 03:24

Вы можете использовать понимание списка с permutations:

from itertools import permutations

df = pd.DataFrame({'id': [1, 2], 'list': [['foo', 'bar'], ['cat', 'dog']]})

>>> pd.DataFrame([[id_, list(perm)] 
                  for id_, list_items in df.values for perm in permutations(list_items)], 
                 columns=['id', 'list'])
   id        list
0   1  [foo, bar]
1   1  [bar, foo]
2   2  [cat, dog]
3   2  [dog, cat]

В зависимости от точной структуры содержимого списка вам может понадобиться сначала выполнить синтаксический анализ.

это решение, кажется, касается нескольких подсчетов слов в столбце, где первое решение работает только со статическим подсчетом слов.

leo 29.05.2019 03:35

Разве это не сделало бы это лучшим решением вашего вопроса? Кроме того, это решение не изменяет исходный фрейм данных.

Alexander 29.05.2019 05:41

Другие вопросы по теме