2017-09-05 34 views
6

Tôi đã cố gắng tìm kiếm cách lấy giá trị của cột đầu tiên và thêm nó vào các cột còn lại trong khung dữ liệu. mà tôi đã thấy cần phải tạo một cột mới cho đầu ra mới.Làm cách nào để bạn thêm các giá trị của cột đầu tiên vào tất cả các cột khác trong một khung dữ liệu gấu trúc

Gần nhất mà tôi tìm thấy dựa trên những gì tôi cần là mã này.

df['col'] = 'str' + df['col'].astype(str) 

Dưới đây là một mẫu của dataframe tôi

 col1  col2 col3 col4 
1 02-04-2017  ND  0.32  0.8 
2 02-05-2017  0.3  ND  No Connection 

Những gì tôi muốn biết là, làm thế nào tôi có thể nhận ra điều này?

 col1   col2    c ol3    col4 
1 02-04-2017 ND|02-04-2017  0.32|02-04-2017  0.8|02-04-2017 
2 02-05-2017 0.3|02-05-2017 ND|02-05-2017  No Connection|02-05-2017 

Trả lời

3

Bạn có thể làm điều này một chút dễ dàng với df.ilocstr.cat:

df.iloc[:, 1:] = df.iloc[:, 1:].apply(lambda x: x.str.cat(df['col1'], sep='|')) 
df 

     col1   col2    col3      col4 
1 02-04-2017 ND|02-04-2017 0.32|02-04-2017   0.8|02-04-2017 
2 02-05-2017 0.3|02-05-2017 ND|02-05-2017 No Connection|02-05-2017 

Bạn cũng có thể sử dụng df.transform (v0.20 trở đi).

df.iloc[:, 1:] = df.iloc[:, 1:].transform(lambda x: x.str.cat(df['col1'], sep='|')) 
df 

     col1   col2    col3      col4 
1 02-04-2017 ND|02-04-2017 0.32|02-04-2017   0.8|02-04-2017 
2 02-05-2017 0.3|02-05-2017 ND|02-05-2017 No Connection|02-05-2017 
+0

Tốt nhắc nhở của 'transform' trên dataframes gửi '0.20' – piRSquared

3

Fun với assign, add, và radd

df.assign(**df.iloc[:, 1:].astype(str).add(df.col1.radd('|'), 0)) 

     col1   col2    col3      col4 
1 02-04-2017 ND|02-04-2017 0.32|02-04-2017   0.8|02-04-2017 
2 02-05-2017 0.3|02-05-2017 ND|02-05-2017 No Connection|02-05-2017 
+0

Không chắc chắn tại sao nhưng tôi đã cố gắng thêm nhiều lần và thất bại. Đoán tôi đã làm sai rồi! –

+0

'dtype' là vấn đề duy nhất tôi có thể nghĩ đến – piRSquared

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