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