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

时间:2019-06-25 23:14:28

标签: python pandas function dataframe

我有一个包含一些俱乐部及其国籍的数据框。就是这样:

enter image description here

我创建了一个函数,该函数将用于基于国籍创建一个新列。我测试了一下,如果我想找到相等的值,它就可以正常工作。但是,我需要搜索包含某个字符的字符串。例如:如果字符串包含“ Br”,则我要创建一个将接收特定值的新列。如果包含另一个字符串,则它将接收另一个值。

这是我到目前为止所做的(并且工作正常,但是我需要类似“包含”的内容):

# 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之类的技巧。而且我无法适应我想要的。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

IIUC,您可以使用SELECT SUM(Amount) AS TotalRevenue FROM GeneralLedger INNER JOIN ChartOfAccounts ON ChartOfAccounts.AcctID=GeneralLedger.ToAcct WHERE ChartOfAccounts.AcctType = 3; SELECT SUM(Amount) AS TotalLiabilities FROM GeneralLedger INNER JOIN ChartOfAccounts ON ChartOfAccounts.AcctID = GeneralLedger.ToAcct WHERE ChartOfAccounts.AcctType = 2;

SELECT SUM(Amount) AS TotalAssets
FROM GeneralLedger INNER JOIN ChartOfAccounts ON ChartOfAccounts.AcctID = GeneralLedger.ToAcct
WHERE ChartOfAccounts.AcctType = 1;

输出:

str.extract