我有一个包含一些俱乐部及其国籍的数据框。就是这样:
我创建了一个函数,该函数将用于基于国籍创建一个新列。我测试了一下,如果我想找到相等的值,它就可以正常工作。但是,我需要搜索包含某个字符的字符串。例如:如果字符串包含“ 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之类的技巧。而且我无法适应我想要的。
答案 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