2012-06-11 37 views
44

Tôi muốn chuyển một cột trong Pandas DataFrame, nhưng tôi đã không thể tìm thấy một phương pháp để làm điều đó từ tài liệu mà không cần viết lại toàn bộ DF. Có ai biết làm thế nào để làm điều đó? DataFrame:Làm thế nào để chuyển một cột trong Pandas DataFrame

## x1 x2 
##0 206 214 
##1 226 234 
##2 245 253 
##3 265 272 
##4 283 291 

đầu ra mong muốn:

## x1 x2 
##0 206 nan 
##1 226 214 
##2 245 234 
##3 265 253 
##4 283 272 
##5 nan 291 

Trả lời

85
In [18]: a 
Out[18]: 
    x1 x2 
0 0 5 
1 1 6 
2 2 7 
3 3 8 
4 4 9 

In [19]: a.x2 = a.x2.shift(1) 

In [20]: a 
Out[20]: 
    x1 x2 
0 0 NaN 
1 1 5 
2 2 6 
3 3 7 
4 4 8 
+3

Kết quả là mất tích ## 5. Có cách nào dễ dàng để gấu trúc mở rộng chỉ mục khi sử dụng dịch chuyển không? –

+0

@WaylonWalker Điều đó được gọi là lăn trong numpy: 'df ['x2'] = np.roll (df ['x2'], 1)' – ayhan

1

Nếu bạn không muốn mất các cột bạn chuyển qua cuối dataframe của bạn, chỉ cần nối số lượng yêu cầu đầu tiên :

offset = 5 
    DF = DF.append([np.nan for x in range(offset)]) 
    DF = DF.shift(periods=offset) 
    DF = DF.reset_index() #Only works if sequential index 
1

Tôi giả sử nhập

import pandas as pd 
import numpy as np 

Đầu tiên nối hàng mới với NaN, NaN,... ở cuối DataFrame (df).

s1 = df.iloc[0] # copy 1st row to a new Series s1 
s1[:] = np.NaN  # set all values to NaN 
df2 = df.append(s1, ignore_index=True) # add s1 to the end of df 

Nó sẽ tạo DF df2 mới. Có lẽ đó là cách thanh lịch hơn nhưng điều này hoạt động.

Bây giờ bạn có thể thay đổi nó:

df2.x2 = df2.x2.shift(1) # shift what you want 
Các vấn đề liên quan