Мне нужно создать новые строки в кадре данных pandas
на основе значения, которое встречается в определенном столбце.
Шаблон для создания Split состоит в том, что существует полутол, который указывает, где мне нужно инициировать новую строку.
Д.Ф.
animal cat;dog;cat
animal dog
animal fish
color black;green
color red
desired_df
animal cat
animal dog
animal cat
animal dog
animal fish
color black
color green
color red
Я видел решения, которые используют pandas split для создания новых столбцов или строк с использованием заданного символа или значений в df (например, здесь: и здесь :), однако я не видел решения, которое делает это с текстовыми значениями. Я также видел решения (а также тот, который я попросил здесь), который может точно заполнить нулевые значения в пандах. Однако мне нужно объединить эти два метода, и мне не ясно, если это возможно сделать в однострочном (или двух).
In [200]: df
Out[200]:
col1 col2
0 animal cat;dog;cat
1 animal dog
2 animal fish
3 color black;green
4 color red
In [201]: (df.set_index('col1')
.col2.str.split(';', expand=True)
.stack()
.reset_index(level=1, drop=True)
.reset_index(name='col2'))
Out[201]:
col1 col2
0 animal cat
1 animal dog
2 animal cat
3 animal dog
4 animal fish
5 color black
6 color green
7 color red
Использование numpy.repeat
и itertools.chain
:
import numpy as np
from itertools import chain
split = df['col2'].str.split(';')
res = pd.DataFrame({'col1': np.repeat(df['col1'], split.map(len)),
'col2': list(chain.from_iterable(split))})
print(res)
col1 col2
0 animal cat
0 animal dog
0 animal cat
1 animal dog
2 animal fish
3 color black
3 color green
4 color red