2012-12-31 37 views
11

Tôi đang sử dụng khung dữ liệu pandas/python. Tôi đang cố gắng để làm một phép trừ tụt hậu.Thêm/trừ cột Pandas

Tôi hiện đang sử dụng:

newCol = df.col - df.col.shift() 

Điều này dẫn đến một NaN ở vị trí đầu tiên:

NaN 
45 
63 
23 
... 

Câu hỏi đầu tiên: Đây có phải là cách tốt nhất để làm một phép trừ như thế này?

Thứ hai: Nếu tôi muốn thêm cột (cùng số hàng) vào cột mới này. Có cách nào mà tôi có thể làm cho tất cả số 0 của NaN để tính toán không?

Ex:

col_1 = 
Nan 
45 
63 
23 

col_2 = 
10 
10 
10 
10 

new_col = 
10 
55 
73 
33 

và KHÔNG

NaN 
55 
73 
33 

Cảm ơn bạn.

Trả lời

16

Tôi nghĩ rằng phương pháp của bạn của máy tính chậm là tốt:

import pandas as pd 
df = pd.DataFrame(range(4), columns = ['col']) 

print(df['col'] - df['col'].shift()) 
# 0 NaN 
# 1  1 
# 2  1 
# 3  1 
# Name: col 

print(df['col'] + df['col'].shift()) 
# 0 NaN 
# 1  1 
# 2  3 
# 3  5 
# Name: col 

Nếu bạn muốn NaN cộng (hoặc trừ) một số là số (không NaN), sử dụng add (hoặc sub) phương thức với fill_value = 0:

print(df['col'].sub(df['col'].shift(), fill_value = 0)) 
# 0 0 
# 1 1 
# 2 1 
# 3 1 
# Name: col 

print(df['col'].add(df['col'].shift(), fill_value = 0)) 
# 0 0 
# 1 1 
# 2 3 
# 3 5 
# Name: col