计算数据框列中列表的所有排列

时间:2019-05-29 00:33:48

标签: python pandas dataframe itertools

我试图在保留id列的同时计算df中列表或列的所有排列。

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 个答案:

答案 0 :(得分:3)

IIUC仅使用permutations中的itertools,那么它是 nestest

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]

答案 1 :(得分:3)

您可以对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]

根据列表内容的确切结构,您可能首先需要解析。