Je dois combiner deux colonnes de données de chaîne en une (dans le même DataFrame), j'ai également besoin d'une sorte de règle de sélection, je vous donne un exemple
nameA nameB nameAB 0 martin NaN martin 1 peter NaN peter 2 john jhon jhon 3 tom tomX tomX 4 bill billX bilX
Cette sortie est le comportement attendu
import numpy as np
import pandas as pd
df = pd.DataFrame({'nameA':['martin', 'peter', 'john', 'tom', 'bill'],
'nameB':[ np.NaN,np.NaN , 'jhon', 'tomX', 'billX']})
df
nameA nameB
0 martin NaN
1 peter NaN
2 john jhon
3 tom tomX
4 bill billX
la règle devrait être quelque chose comme ceci:
J'ai trouvé des astuces avec des nombres mais pas avec des chaînes, je pense que je dois tester ligne par ligne et obtenir une valeur vraie ou fausse, puis écrire la valeur appropriée
Tout conseil ou assistance serait grandement apprécié!
3 Réponses :
Utilisez np.where :
nameA nameB nameAB 0 martin NaN martin 1 peter NaN peter 2 john jhon jhon 3 tom tomX tomX 4 bill billX billX
Production
import pandas as pd
import numpy as np
df = pd.DataFrame({'nameA': ['martin', 'peter', 'john', 'tom', 'bill'],
'nameB': [np.NaN, np.NaN, 'jhon', 'tomX', 'billX']})
df['nameAB'] = np.where(pd.isna(df['nameB']), df['nameA'], df['nameB'])
print(df)
Étant donné que vous revenez que vos conditions nameA quand nameB est nan .
Series.fillnanameA nameB nameAB 0 martin NaN martin 1 peter NaN peter 2 john jhon jhon 3 tom tomX tomX 4 bill billX billX
Production
df['nameAB'] = df['nameB'].fillna(df['nameA']) print(df)
Vous pouvez utiliser df.combine_first() :
In [1972]: df['nameAB'] = df.nameB.combine_first(df.nameA)
In [1973]: df
Out[1973]:
nameA nameB nameAB
0 martin NaN martin
1 peter NaN peter
2 john jhon jhon
3 tom tomX tomX
4 bill billX billX
@Karendonseisysiete La réponse a-t-elle fonctionné pour vous?
Oui Mayank, je suis vraiment surpris qu'il existe une méthode qui répond à ma question, merci encore
Merci à tous, je l'apprécie vraiment