3 回答
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
TA贡献1891条经验 获得超3个赞
这是因为您将 a 和 b 拉出为DataFrame不是系列,
a
Out[312]:
presence x y vx vy lane
2 0 46 8 9 0.2 2
b
Out[313]:
presence x y vx vy lane
1 1 35 4 5 0.5 1
上面的数据帧index是不同的,当我们进行计算时pandas会检查index第一个,如果索引不匹配那么输出将是NaN
快速解决 :
diff_x = b[['x','y']].values - a[['x','y']].values
diff_x
Out[311]: array([[-11, -4]], dtype=int64)
![?](http://img1.sycdn.imooc.com/5c4aa098000126bb09600960-100-100.jpg)
TA贡献1797条经验 获得超4个赞
pandas是面向索引的,转换为数组然后比较:
a = df.iloc[[2]]
b = df.iloc[[1]]
diff_x = a[['x','y']].to_numpy() - b[['x','y']].to_numpy()
#array([[11, 4]], dtype=int64)
或者,对于 2 个连续行,您可以使用diff:
df[['x','y']].diff().iloc[2]
x 11.0
y 4.0
Name: 2, dtype: float64
![?](http://img1.sycdn.imooc.com/54586653000151cd02200220-100-100.jpg)
TA贡献1872条经验 获得超3个赞
您可以使用.loc
样式索引来获取pandas.Series
特定行索引和列名称。然后你可以减去这两个系列。
如果您希望得到 11 和 4 作为输出,则必须反转帖子中的减法运算。
diff_x = df.loc[2, ["x", "y"]] - df.loc[1, ["x", "y"]]
# x 11.0
# y 4.0
# dtype: float64
添加回答
举报