Использование:
df = pd.DataFrame({'A': ['Pink_Floyd,Beatles,Pearl_Jam,Porcupine_Tree', 'Beatles'],
'B': [5.56, 10.0]})
print (df)
A B
0 Pink_Floyd,Beatles,Pearl_Jam,Porcupine_Tree 5.56
1 Beatles 10.00
s = (df.pop('A').str.split(',', expand=True)
.stack()
.reset_index(level=1, drop=True)
.rename('A'))
df = df.join(s).reset_index(drop=True)[['A','B']]
Объяснение
- Извлечь столбец
A
по pop
- Затем
split
до DataFrame
- Изменить на
stack
- Затем
reset_index
для удаления первого уровня MultiIndex
- Изменить имя столбца на
rename
- Последний
join
к оригиналу и при необходимости измените порядок столбцов на list
Или создать новый DataFrame
с помощью конструктора:
from itertools import chain
a = df['A'].str.split(',')
df = pd.DataFrame({
'A' : list(chain.from_iterable(a.values.tolist())),
'B' : df['B'].values.repeat(a.str.len())
})
print (df)
A B
0 Pink_Floyd 5.56
1 Beatles 5.56
2 Pearl_Jam 5.56
3 Porcupine_Tree 5.56
4 Beatles 10.00