Pandas列加/减

use*_*092 11 python pandas

我正在使用pandas/python数据帧.我想做一个滞后减法.

我目前正在使用:

newCol = df.col - df.col.shift()
Run Code Online (Sandbox Code Playgroud)

这导致第一点出现NaN:

NaN
45
63
23
...
Run Code Online (Sandbox Code Playgroud)

第一个问题:这是这样做减法的最好方法吗?

第二:如果我想向这个新列添加一列(相同的行数).有没有办法可以让所有NaN的0用于计算?

例如:

col_1 = 
Nan
45
63
23

col_2 = 
10
10
10
10

new_col = 
10
55
73
33
Run Code Online (Sandbox Code Playgroud)

并不是

NaN
55
73
33
Run Code Online (Sandbox Code Playgroud)

谢谢.

unu*_*tbu 17

我认为你的计算滞后的方法很好:

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
Run Code Online (Sandbox Code Playgroud)

如果您希望NaN加号(或减号)为数字(不是NaN),请使用add(或sub)方法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
Run Code Online (Sandbox Code Playgroud)