如何检查数据框中同一列中所有其他值之间的列值?

2024-06-26 01:56:00 发布

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

我有一个熊猫数据框,它有三列。贷款类型通常有5个值。比如说Conso,Immo,Pro,Autre,Tous。对于此数据帧,仅包含贷款类型“Immo”(一开始我们不知道贷款类型是什么)。如何检查所有贷款类型中的贷款类型

CodeProduit  LoanType   Year
301          Immo       2003
301          Immo       2004
301          Immo       2005
301          Immo       2006
...          ...        ....
301          Immo       2017

def check_type_pret(p):
    if p == 'Immo':
         return p
    elif p == 'Conso':
        return p
    elif p == 'Pro':
        return p
    elif p == 'Autres':
        return p
    elif p == 'Tous':
        return p
    else:
        return 0



df1['Answer']=df1.LoanType.map(check_type_pret)

作为一个输出,我得到0作为答案列。我怎样才能像我解释的那样被期望出来


Tags: 数据类型returnchecktypeprodf1elif
1条回答
网友
1楼 · 发布于 2024-06-26 01:56:00

如果要检查是否存在LLoanType中的所有值,请使用:

L = ['Immo', 'Conso', 'Pro', 'Autres', 'Tous']
a = all([(df['LoanType'] == x).any() for x in L])
print (a)
False

或:

s = set(['Immo', 'Conso', 'Pro', 'Autres', 'Tous'])
a = s.issubset(set(df['LoanType'].tolist()))
print (a)
False

编辑:

如果您的解决方案返回0,则没有匹配项

我猜有些traling空格,所以需要首先通过^{}删除它们:

df1['Answer'] = df1.LoanType.str.strip().map(check_type_pret)

另一个具有^{}^{}的溶液和具有^{}的条件:

print (df1)
   CodeProduit LoanType  Year
0          301    Immo1  2003
1          301    Conso  2004
2          301      Pro  2005
3          301   Autres  2006
4          301     Tous  2017

df1.LoanType = df1.LoanType.str.strip()

L = ['Immo', 'Conso', 'Pro', 'Autres', 'Tous']
df1['Answer'] = np.where(df1.LoanType.isin(L), df1.LoanType, 0)
#another solution
#df1['Answer'] = df1.LoanType.where(df1.LoanType.isin(L),  0)
print (df1)
   CodeProduit LoanType  Year  Answer
0          301    Immo1  2003       0
1          301    Conso  2004   Conso
2          301      Pro  2005     Pro
3          301   Autres  2006  Autres
4          301     Tous  2017    Tous

相关问题 更多 >