Как запустить оператор if-else в цикле внутри фрейма данных - PullRequest
0 голосов
/ 06 июня 2018

У меня есть фрейм данных с именем столбца1, я хочу запустить оператор if-else, чтобы отделить фамилию специальным символом '-' и вывести их как name2 и name3, как мне это сделать?

import pandas as pd 

d = {
    'name1': ['Braund', 'Cummings-Johnson', 'Heikkinen-Smith'],
    'name2': ['Braund', 'Cummings', 'Heikkinen'],
    'name3': ['Braund', 'Johnson', 'Smith']
}

df = pd.DataFrame(d)

1 Ответ

0 голосов
/ 08 июня 2018

Pandas предназначен для того, чтобы вы могли применять операции ко всем столбцам, а не использовать цикл for, как вы описали.Один из методов, который вы можете искать, это str.split() с expand=True:

>>> df.name1.str.split('-', expand=True)
           0        1
0     Braund     None
1   Cummings  Johnson
2  Heikkinen    Smith

Обратите внимание, что имена без дефиса будут даны None для второго элемента.Вы также можете отфильтровать только по имени, начинающемуся с дефиса:

>>> df.loc[df.name1.str.contains('-'), 'name1'].str.split('-', expand=True)
           0        1
1   Cummings  Johnson
2  Heikkinen    Smith

Чтобы переименовать столбцы:

df.loc[df.name1.str.contains('-'), 'name1']\
    .str.split('-', expand=True)\
    .rename(columns={0: 'name2', 1: 'name3'})

И наконец, если вам действительно нужно подражать именно вашему примеру, вы можете использоватьffill():

>>> df.name1.str.split('-', expand=True).ffill(axis=1)
           0        1
0     Braund   Braund
1   Cummings  Johnson
2  Heikkinen    Smith
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...