2015-10-13 25 views
8

Mam ramki danych pandy takiego:Scalanie wielu wartości kolumn w jednej kolumnie w pand Pythona

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   

Co chcę zrobić teraz jest uzyskanie nowego dataframe zawierający COLUMN1 i nowy kręgosłupa. Ten Columna powinna zawierać wszystkie wartości z kolumn 2 - (do) n (gdzie n to liczba kolumn z Kolumna2 do końca wiersza) tak:

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

Jak mogłem najlepszym rozwiązaniem tej kwestii? Każda rada byłaby pomocna. Z góry dziękuję!

Odpowiedz

16

Można zadzwonić apply wprost axis=1 do apply row-mądry, a następnie przekształcić dtype do str i 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 

Tutaj nazywam dropna aby pozbyć się NaN jednak musimy ponownie oddane do int, więc nie otrzymamy spacji jako str.

+0

Dzięki za szybką odpowiedź! Czy istnieje sposób, w jaki mogę wykluczyć wartości z kolumny 1 z kolumny A? –

+0

Przepraszam, widziałem twoje pożądane wyniki, więc zaktualizowałem moją odpowiedź. – EdChum

+0

OK, myślę, że rozumiem, jak to robisz! Dziękuję Ci! –

Powiązane problemy