为了账号安全,请及时绑定邮箱和手机立即绑定

在pandas dataframe python中减去两行的一系列列

在pandas dataframe python中减去两行的一系列列

宝慕林4294392 2023-07-11 14:33:12
我有一个带有六个不同标签的数据框:presence、x、y、vx和。我想区分一系列列 [ , , , ] 上的两个行索引。然而,减去给了我. 谢谢您的帮助。vylanexyvxvyNaNimport pandas as pddata = {'presence': [1, 1, 0, 1],        'x': [17, 35, 46, 57],        'y': [4, 4, 8, 0],        'vx': [2, 5, 9, 12],        'vy': [0.3, 0.5, 0.2, 0],         'lane': [0, 1, 2, 0]}df = pd.DataFrame(data)a = df.iloc[[2]]b = df.iloc[[1]]diff_x = b[['x','y']] - a[['x','y']] # Gives two rows and two columns of nan# Expected output: 11  4 
查看完整描述

3 回答

?
万千封印

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)


查看完整回答
反对 回复 2023-07-11
?
繁星coding

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


查看完整回答
反对 回复 2023-07-11
?
守着一只汪

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


查看完整回答
反对 回复 2023-07-11
  • 3 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信