如何构建一个函数来基于包含特定字符串的其他列创建一个新列?

2024-04-20 13:24:50 发布

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

我有一些俱乐部和他们的国籍的数据框。就像这个:

enter image description here

我创建了一个函数,用于根据国籍创建一个新列。我测试过,如果我想找到相等的值,它工作得很好。但是,我需要搜索包含某个字符的字符串。例如:如果字符串包含“Br”,则我要创建一个新列,该列将接收某个值。如果包含另一个字符串,则它将接收另一个值

到目前为止,我已经做到了这一点(它工作得很好,但我需要一个类似于“contains”的东西):

# Function 
def label_race (row):
    if row['Nationality'] == 'Brazil':
        return 'Brasil'
    else:
        return 'NA'

df.apply (lambda row: label_race(row), axis=1)

我想这样做:

# Function 
def label_race (row):
    if row['Nationality'] contains'Br':
        return 'Brasil'
    if row['Nationality'] contains'Brl':
        return 'Brasil2'
    else:
return 'NA'

df.apply (lambda row: label_race(row), axis=1)

我发现了一些技巧,但大多数都使用is.find()或df[].str.contains之类的方法。我不能适应我想要的


Tags: 字符串brdfreturnifdeffunctionelse
2条回答

IIUC,你可以用str.extractdot

df = pd.DataFrame({'Nationality': ['Brazil', 'abBrl', 'abcd', 'BrX']})

new_df = df.Nationality.str.extract('(?P<Brazil2>Brl)|(?P<Brazil>Br)')

new_df.notnull().dot(new_df.columns)

输出:

0     Brazil
1    Brazil2
2           
3     Brazil
dtype: object

如果您想创建一个具有二进制值的新列(如果条件满足,那么a或者B),您可以这样做

#create a column 'new' with value 'Brasil' if 'Nationality' value contains 'Bra', else put 'NA'
df['new'] = df['Nationality'].apply(lambda x: 'Brasil' if 'Bra' in x else 'NA')

否则,如果您想创建一个列并在同一列中使用多个规则,您可以这样做

#create a column 'new' and insert value 'ARG' whenever 'Nationality' contains 'Arg', 
df.loc[df['Nationality'].str.contains('Arg'), 'new'] = 'ARG'
#and 'BRA' whenever Nationality contains 'Brazil', without overriding any other values
df.loc[df['Nationality'].str.contains('Brazil'), 'new'] = 'BRA'

相关问题 更多 >