我想通过使用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-这是一项容易的任务,对此我不需要任何帮助。 我希望我能解释一下。 在此先感谢您的帮助。
答案 0 :(得分:3)
一种解决方案是获取索引并使用i-2
和i+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