计算特定row_pandas之前和之后的行之间的差异

时间:2018-08-22 14:06:55

标签: python pandas numpy

我想找到特定行之前和之后的行之间的差异。具体来说,我有以下数据集:

 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列中的第三行。重要点:我不需要仅上一个和下一个。我应该找到前2行和后2行之间的区别。我的意思是,B列第23行中的值等于A列第21行中的值与A列第25行中的值之差。为了简单起见,我使用了上一行和下一行。 我希望我能解释一下。

3 个答案:

答案 0 :(得分:2)

似乎您需要一个居中 rolling窗口。您可以使用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是回顾行和前瞻行的数量,您应在其中加上1占中间的值)。因此,通用公式为

window = 2*N + 1

如果需要在前2行和在后2行,则需要N = 2。如果您需要5和5,N=5(并且窗口= 11)等。 apply lambda保持不变。

答案 1 :(得分:2)

让系列(即DataFrame列)为s

您要

s.shift(1) - s.shift(-1)

答案 2 :(得分:1)

您需要在要运行计算的列(系列)上使用.shift。

使用shift(1)将获得上一行,使用shift(-1)将获得下一行。

您需要从那里计算previous - next

>>> s = pd.Series([4,2,2,3,2])
>>> s
0    4
1    2
2    2
3    3
4    2
dtype: int64
# previous 
>>> s.shift(1)
0    NaN
1    4.0
2    2.0
3    2.0
4    3.0
dtype: float64
# next 
>>> s.shift(-1)
0    2.0
1    2.0
2    3.0
3    2.0
4    NaN
dtype: float64
# previous - next 
>>> s.shift(1)-s.shift(-1)
0    NaN
1    2.0
2   -1.0
3    0.0
4    NaN
dtype: float64