вычислить все перестановки списка в столбце данных - PullRequest
3 голосов
/ 29 мая 2019

Я пытаюсь вычислить все перестановки списка или столбца в 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

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Вы можете использовать понимание списка с помощью 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]

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

3 голосов
/ 29 мая 2019

IIUC только с использованием permutations из itertools, тогда unnest

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]
...