2017-12-17 3 views
0

Ich habe einen Pandas-Datenrahmen, der drei Spalten hat. Normalerweise hat der Kredittyp 5 Werte. Sagen wir Conso, Immo, Pro, Autre, Tous. Zu diesem Datenrahmen gibt es nur die Darlehensart 'Immo'. (Am Anfang wissen wir nicht, was der Loan-Typ ist). Wie überprüfe ich, wie der Kredittyp unter all diesen Kreditarten ist?Wie überprüft man den Spaltenwert unter allen anderen Werten in derselben Spalte im Pandas Data Frame?

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) 

Als eine Ausgabe bekomme ich 0 für die Antwort Spalte. Wie werde ich erwartet wie gesagt?

+0

Ihr Code scheint gut für mich zu arbeiten, : 'df1 ['Answer']' endet in jeder Zeile als 'Immo'. – fuglede

Antwort

1

Wenn überprüfen möchten, ob alle Werte existieren in L in Spalte LoanType Verwendung:

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

Oder:

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

EDIT:

Wenn Ihre Lösung Rückkehr 0 es keine Übereinstimmung gibt.

Ich denke, einige traling Whitespaces, so entfernen müssen sie zuerst durch strip:

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

Eine andere Lösung mit numpy.where oder where und Zustand mit isin:

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 
Verwandte Themen