根据另一列计算行之间的差异

时间:2018-08-22 12:12:58

标签: python pandas numpy

我想通过使用python / pandas计算基于某一列的行之间的差异。我想我可以使用一些小例子来更好地解释。因此,我有以下数据:

 Number of rows       A             B
 1                    4             NaN
 2                    2             NaN
 3                    2             1
 4                    3             NaN
 5                    2             NaN

我想获取以下数据:

 Number of rows      A            B           C
 3                   2            1           2

所以,让我解释一下我在这里所做的事情。首先,我需要标识列B的行,该行的值为1(可以看到,行号3的行值为1)。然后,我需要找到该行之前和之后的两行之间的差异(第3行),并将结果显示为C列。在我们的示例中,第3行之前的2行是第1行,其后是2行第3行是第5行。COLUMNA的第1行和第5行的值之差是2(4-2 = 2)(最后,我将使行仅在Column中具有值C-这是一项容易的任务,对此我不需要任何帮助。 我希望我能解释一下。 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

一种解决方案是获取索引并使用i-2i+2

i = df.loc[df.B.eq(1)].index.tolist()
j = [(i_-2,i_+2) for i_ in i ]

df.loc[df.B.eq(1), 'C'] = [df.A.iloc[a] - df.A.iloc[b] for (a,b) in j]

n   A   B   C
0   1   4   NaN NaN
1   2   2   NaN NaN
2   3   2   1.0 2.0
3   4   3   NaN NaN
4   5   2   NaN NaN

当然,也可以在b=1中再次切片,以达到预期的输出结果

df[df.B.eq(1)]
    n   A   B   C
2   3   2   1.0 2.0