Je veux agréger deux colonnes pour être dans une nouvelle colonne. Il est possible que les deux colonnes incluent la valeur NaN. Le tableau ressemble à ci-dessous:

no   type   status   category
1     a       xx        yy   
2     b       xx        nan
3     c       nan       nan

Ce que j'ai essayé jusqu'à présent, c'est de les agréger en utilisant ce script suivant. Mais il combine aussi deux NaN devenus NaN_NaN

df['category'] = df[['cat_1', 'cat_2']].astype(str).agg('_'.join, axis = 1)

Le résultat attendu est que s'il y a deux NaN, la nouvelle colonne donnera uniquement NaN à la nouvelle colonne au lieu de NaN_NaN

no   type   cat_1      cat_2    category  
1     a       xx        yy        xx_yy
2     b       xx        nan       xx_nan
3     c       nan       nan        nan
0
nomnom3214 17 mars 2021 à 06:50

2 réponses

Meilleure réponse

Vous pouvez le faire de cette façon:

df["category"] = df[["cat_1","cat_2"]].astype(str).agg(lambda x: '_'.join(set(x)), 1)

Ou équivalent:

df["category"] = df[["cat_1","cat_2"]].astype(str).agg(set, 1).agg('_'.join)

Sortie (dans les deux cas)

df
   no type cat_1 cat_2 category
0   1    a    xx    yy    xx_yy
1   2    b    xx   NaN   nan_xx
2   3    c   NaN   NaN      nan
0
Pablo C 17 mars 2021 à 04:04

Vous devrez peut-être fillna

df['category'] = df[['status', 'category']].fillna('NaN').agg('_'.join, axis = 1)
df
Out[308]: 
   no type status category
0   1    a     xx    xx_yy
1   2    b     xx   xx_NaN
2   3    c    NaN  NaN_NaN
0
BENY 17 mars 2021 à 03:55