2015-10-13 31 views
8

Ho un frame di dati panda in questo modo:Unire più valori di colonna in una colonna nella panda pitone

Column1 Column2 Column3 Column4 Column5 
0 a  1  2  3  4 
1 a  3  4  5 
2 b  6  7  8 
3 c  7  7   

Quello che voglio fare ora sta ottenendo un nuovo dataframe contenente Column1 e una nuova Columna. Questo Columna deve contenere tutti i valori da colonne 2 - (a) n (dove n è il numero di colonne da Column2 alla fine della riga) in questo modo:

Column1 ColumnA 
0 a  1,2,3,4 
1 a  3,4,5 
2 b  6,7,8 
3 c  7,7 

Come potrei approccio migliore questo problema? Qualsiasi consiglio sarebbe utile. Grazie in anticipo!

risposta

16

È possibile chiamare apply passaggio axis=1-apply fila-saggio, quindi convertire il DTYPE per str e join:

In [153]: 
df['ColumnA'] = df[df.columns[1:]].apply(lambda x: ','.join(x.dropna().astype(int).astype(str)),axis=1) 
df 

Out[153]: 
    Column1 Column2 Column3 Column4 Column5 ColumnA 
0  a  1  2  3  4 1,2,3,4 
1  a  3  4  5  NaN 3,4,5 
2  b  6  7  8  NaN 6,7,8 
3  c  7  7  NaN  NaN  7,7 

Qui mi chiamano dropna per sbarazzarsi del NaN, però abbiamo bisogno di lanciare di nuovo per int quindi non ci ritroviamo con float come str.

+0

Grazie per la risposta veloce! Esiste un modo per escludere i valori da Column1 da ColumnA? –

+0

Mi dispiace, ho appena visto l'output desiderato, quindi ho aggiornato la mia risposta – EdChum

+0

Ok, penso di capire come lo fai! Grazie! –