2017-10-18 1 views
1

J'ai un dataframe de pandas géants comme ceci:pandas géants ajouter une nouvelle colonne basée sur une logique conditionnelle des valeurs manquantes

aa bb cc dd ee 
a a b b foo 
a b a a foo 
b nan a a bar 
b b b b bar 

Je veux créer une nouvelle colonne df['ff'] comme:

aa bb cc dd ee ff 
a a b b foo c 
a b a a foo c 
a nan a a bar d 
a b b b bar c 

La logique est la suivante: if df['bb'] is not null and df['aa']==a, then c else d

Basé sur des réponses à d'autres questions, je pense que la réponse devrait être quelque chose comme ceci:

df['ff'] = df.apply(lambda x: x['bb'].isnull(),axis=1) & (x['aa']=='a')

Mais je reçois une erreur comme ceci:

("'str' object has no attribute 'isnull'", 'occurred at index 0')

Répondre

2

J'utilise l'approche vectorisé suivante:

In [47]: df['ff'] = np.where(df['bb'].notnull() & df['aa'].eq('a'), 'c', 'd') 

In [48]: df 
Out[48]: 
    aa bb cc dd ee ff 
0 a a b b foo c 
1 a b a a foo c 
2 b NaN a a bar d 
3 b b b b bar d