Используйте itertools.permutations
с разделенными значениями и пониманием списка сглаживания, затем объединяйте значения вместе пробелом и добавляйте значение индекса к помощнику DataFrame
- df1
.Последний join
оригинальный DataFrame:
from itertools import permutations
L = [(' '.join(y), k) for k, v in df['Keyword'].items() for y in permutations(v.split())]
df1 = pd.DataFrame(L, columns=['Keyword','idx']).set_index('idx')
print (df1)
Keyword
idx
0 ale bale cale
0 ale cale bale
0 bale ale cale
0 bale cale ale
0 cale ale bale
0 cale bale ale
1 bale cale
1 cale bale
Другое решение для df1
:
vals, idx = list(zip(*L))
df1 = pd.DataFrame({'Keyword':vals}, index=idx).rename_axis('idx')
df = df1.join(df.drop('Keyword',axis=1), on='idx').reset_index(drop=True)
print (df)
Keyword Category_1 Category_2 Category_3
0 ale bale cale bale cale cale
1 ale cale bale bale cale cale
2 bale ale cale bale cale cale
3 bale cale ale bale cale cale
4 cale ale bale bale cale cale
5 cale bale ale bale cale cale
6 bale cale cale cale ale
7 cale bale cale cale ale