Использование значения символа для создания новых строк в Pandas

1

Мне нужно создать новые строки в кадре данных 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 (например, здесь: и здесь :), однако я не видел решения, которое делает это с текстовыми значениями. Я также видел решения (а также тот, который я попросил здесь), который может точно заполнить нулевые значения в пандах. Однако мне нужно объединить эти два метода, и мне не ясно, если это возможно сделать в однострочном (или двух).

Теги:
pandas
split
fill

2 ответа

1
Лучший ответ
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
0

Использование 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню