web-dev-qa-db-fra.com

pandas fusionner les colonnes pour créer une nouvelle colonne avec des valeurs séparées par des virgules

Mon dataframe a quatre colonnes avec des couleurs. Je veux les combiner dans une colonne appelée "Couleurs" et utiliser des virgules pour séparer les valeurs.

Par exemple, j'essaye de combiner dans une colonne Couleurs comme ceci:

ID  Black Red  Blue  Green  Colors   
120 NaN   red  NaN   green  red, green  
121 black Nan  blue  NaN    black, blue

Mon code est:

df['Colors'] = df[['Black, 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x), axis=1)

Mais la sortie pour ID 120 est:, rouge, vert

Et la sortie pour ID 121 est: noir, bleu,

TROUVE MON PROBLÈME! Plus tôt dans mon code, j'ai remplacé "Aucun" par "" au lieu de NaN. Après avoir effectué le changement, plus incorporé des commentaires pour insérer [x.notnull ()], cela fonctionne!

df['Black'].replace('None', np.nan, inplace=True)
df['Colors'] = df[['Black, 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x[x.notnull()]), axis=1)
8
KRDavis

Vous avez juste besoin de gérer les NaN

df['Colors'] = df[['Black', 'Red', 'Blue', 'Green']].apply(lambda x: ', '.join(x[x.notnull()]), axis = 1)

    ID      Black   Red Blue    Green   Colors
0   120     NaN     red NaN     green   red, green
1   121     black   NaN blue    NaN     black, blue
5
Vaishali

Utilisation de dot

s=df.iloc[:,1:]
s.notnull()
   Black   Red   Blue  Green
0  False  True  False   True
1   True  True   True  False
s.notnull().dot(s.columns+',').str[:-1]
0         Red,Green
1    Black,Red,Blue
dtype: object

df['color']=s.notnull().dot(s.columns+',').str[:-1]
1
YOBEN_S