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

Python 如何构建一个函数来基于包含特定字符串的其他列创建一个新列?,python,pandas,function,dataframe,Python,Pandas,Function,Dataframe,我有一些俱乐部和他们的国籍的数据框。就像这个: 我创建了一个函数,用于根据国籍创建一个新列。我进行了测试,如果我想找到相等的值,它工作得很好。但是,我需要搜索包含某个字符的字符串。例如:如果字符串包含“Br”,则我希望创建一个新列,该列将接收特定值。如果包含另一个字符串,则它将接收另一个值 这就是我到目前为止所做的(它工作得很好,但我需要像“包含”这样的东西): 我想这样做: # Function def label_race (row): if row['Nationality']

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

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

这就是我到目前为止所做的(它工作得很好,但我需要像“包含”这样的东西):

我想这样做:

# 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之类的方法。我不能适应我想要的。

如果您想创建一个具有二进制值的新列(如果条件满足,则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'

IIUC,您可以使用
str.extract
dot

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)

好的,你能给我们举一个需要包含解决方案的数据的例子吗?具体来说,这行:“例如:如果字符串包含'Br',那么我想创建一个新的列,它将接收特定的值。”非常模糊。嘿@cs95你现在能检查这个问题是否正确吗?TksIt是有道理的,但最简单的方法是通过正则表达式,我认为熊猫不容易做到这一点。我尝试了
s=pd.Series(['brassseeel','I like Brl'])
作为一个例子,使用“Br”和“Brl”作为搜索模式。做不到。
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