我想找出特定行之前和之后的行之间的区别。具体来说,我有以下数据集:
Number of rows A
1 4
2 2
3 2
4 3
5 2
我应该得到以下数据:
Number of rows A B
1 4 NaN (since there is not row before this row)
2 2 2 (4-2)
3 2 -1 (2-3)
4 3 0 (2-2)
5 2 NaN (since there is not row after this row)
如您所见,B 列中的每一行等于 A 列中前后行之间的差值。例如,B 列中的第二行等于 A 列中第一行中的值与 A 列中的值之间的差值A 列中的第三行。重要的一点:我不需要只有前一个和后一个。我应该找出前两行和后两行之间的区别。我的意思是 B 列第 23 行中的值等于 A 列第 21 行中的值与 A 列第 25 行中的值之间的差值。为简单起见,我使用了前面和后面的行。 我希望我能解释一下。
请您参考如下方法:
看来你需要一个居中 rolling window 。您可以使用 arg center=True
>>> df.A.rolling(3, center=True).apply(lambda s: s[0]-s[-1])
0 NaN
1 2.0
2 -1.0
3 0.0
4 NaN
Name: A, dtype: float64
这种方法适用于任何窗口。请注意,这是一个居中窗口,因此窗口的大小必须为 N+N+1(其中 N 是lookback 和 lookforward 行,你加 1 来计算中间的值)。因此,一般公式为
window = 2*N + 1
如果您需要前 2 行和后 2 行,则 N = 2。如果您需要 5 和 5,N=5(和 window = 11)等。apply lambda 保持不变。
