2012-12-31 23 views
11

Ich benutze ein Pandas/Python-Datenframe. Ich versuche eine Lag-Subtraktion zu machen.Pandas Spalte Addition/Subtraktion

Ich bin derzeit mit:

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

Dies führt zu einer NaN im ersten Spot:

NaN 
45 
63 
23 
... 

Erste Frage: Ist dies der beste Weg, um eine Subtraktion wie dies zu tun?

Zweitens: Wenn ich eine Spalte (gleiche Anzahl von Zeilen) zu dieser neuen Spalte hinzufügen möchte. Gibt es eine Möglichkeit, dass ich alle NaN's 0 für die Berechnung machen kann?

Ex:

col_1 = 
Nan 
45 
63 
23 

col_2 = 
10 
10 
10 
10 

new_col = 
10 
55 
73 
33 

und NICHT

NaN 
55 
73 
33 

Danke.

Antwort

16

Ich denke, Ihre Methode des Rechnens nacheilt ist gut so:

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 

Wenn Sie NaN wünschen plus (oder minus) eine Zahl, die die Anzahl (nicht NaN) zu sein, verwenden Sie die add (oder sub) Methode mit 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