如何在datafram中的循环上运行ifelse语句

2024-06-25 23:36:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列名为1的数据帧,我想运行一个if else语句,用特殊字符“-”分隔出lastname,然后像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)

Tags: 数据importif语句elsepdsmithlastname
1条回答
网友
1楼 · 发布于 2024-06-25 23:36:19

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

相关问题 更多 >