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 нет, ты не можешь :-)
Вы можете использовать понимание списка с 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]
В зависимости от точной структуры содержимого списка вам может понадобиться сначала выполнить синтаксический анализ.
это решение, кажется, касается нескольких подсчетов слов в столбце, где первое решение работает только со статическим подсчетом слов.
Разве это не сделало бы это лучшим решением вашего вопроса? Кроме того, это решение не изменяет исходный фрейм данных.
Является ли значение В самом деле
'foo bar'
или['foo', 'bar']
?