猿问

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

我有一个带有六个不同标签的数据框:presence、x、y、vx和。我想区分一系列列 [ , , , ] 上的两个行索引。然而,减去给了我. 谢谢您的帮助。vylanexyvxvyNaN


import pandas as pd

data = {'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 


宝慕林4294392
浏览 145回答 3
3回答

万千封印

这是因为您将 a 和 b 拉出为DataFrame不是系列,aOut[312]:    presence   x  y  vx   vy  lane2         0  46  8   9  0.2     2bOut[313]:    presence   x  y  vx   vy  lane1         1  35  4   5  0.5     1上面的数据帧index是不同的,当我们进行计算时pandas会检查index第一个,如果索引不匹配那么输出将是NaN快速解决 :diff_x = b[['x','y']].values - a[['x','y']].valuesdiff_xOut[311]: array([[-11,  -4]], dtype=int64)

繁星coding

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.0y     4.0Name: 2, dtype: float64

守着一只汪

您可以使用.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
随时随地看视频慕课网APP

相关分类

Python
我要回答