2015-10-13 74 views
8

Tôi có một khung dữ liệu gấu trúc như thế này:Merge nhiều giá trị cột thành một cột trong gấu trúc python

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   

Những gì tôi muốn làm bây giờ là nhận được một dataframe mới có chứa COLUMN1 và columnA mới. Cột nàyA phải chứa tất cả các giá trị từ cột 2 - (đến) n (trong đó n là số cột từ Cột2 đến cuối hàng) như sau:

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

Làm cách nào để tiếp cận tốt nhất vấn đề này? Lời khuyên nào sẽ là hữu ích. Cảm ơn trước!

Trả lời

16

Bạn có thể gọi apply qua axis=1-apply hàng-khôn ngoan, sau đó chuyển đổi dtype để strjoin:

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 

Ở đây tôi gọi dropna để thoát khỏi các NaN, tuy nhiên chúng tôi cần phải cast một lần nữa để int vì vậy chúng tôi không kết thúc với phao như str.

+0

Cảm ơn câu trả lời nhanh! Có cách nào tôi có thể loại trừ các giá trị từ Column1 từ ColumnA? –

+0

Xin lỗi, chỉ cần nhìn thấy kết quả mong muốn của bạn vì vậy đã cập nhật câu trả lời của tôi – EdChum

+0

Được rồi, tôi nghĩ rằng tôi hiểu cách bạn làm điều đó! Cảm ơn bạn! –

Các vấn đề liên quan