我试图在保留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
答案 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]
根据列表内容的确切结构,您可能首先需要解析。