我有一个熊猫数据框
x
1
3
4
7
10
我想创建一个新列y
作为y[i] = x[i] - x[i-1]
(和y[0] = x[0]
)。
因此上述数据框将变为:
x y
1 1
3 2
4 1
7 3
10 3
如何使用python-3做到这一点?非常感谢
答案 0 :(得分:3)
使用.shift()
和fillna()
:
df['y'] = (df['x'] - df['x'].shift(1)).fillna(df['x'])
为解释其作用,如果我们print(df['x'].shift(1))
,我们将获得以下系列的信息:
0 NaN
1 1.0
2 3.0
3 4.0
4 7.0
您来自'x'
的值向下移动了一行。第一行得到NaN
,因为它上面没有向下移动的值。因此,当我们这样做时:
print(df['x'] - df['x'].shift(1))
我们得到:
0 NaN
1 2.0
2 1.0
3 3.0
4 3.0
这是您减去的值,但是在第一行中,我们再次得到NaN
。为了清除这一点,我们使用.fillna()
,告诉我们只要遇到空值,我们就只想从df['x']
中获取值。