首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算特定row_pandas之前和之后的行之间的差异

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

Stack Overflow用户
提问于 2018-08-22 14:06:55
回答 3查看 65关注 0票数 1

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

代码语言:javascript
复制
 Number of rows       A             
 1                    4             
 2                    2             
 3                    2             
 4                    3             
 5                    2    

我应该得到以下数据:

代码语言:javascript
复制
 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列中的第三行的值之间的差额。我应该找到前2行和后面2行的区别。我的意思是B列中的第23行中的值等于A列中第21行中的值与A列中第25行中的值之间的差额,我使用前面和下面的行来简化操作。我希望我能解释清楚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-22 14:16:23

似乎您需要一个居中的rolling窗口。您可以使用arg center=True指定

代码语言:javascript
复制
>>> 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来计算中间的值)。因此,一般的公式是

代码语言:javascript
复制
window = 2*N + 1

如果您需要2行之前和2行之后,那么N = 2。如果您需要5和5,N=5 (和window = 11)等等,则apply lambda保持不变。

票数 2
EN

Stack Overflow用户

发布于 2018-08-22 14:16:43

将系列(即DataFrame列)设为s

你想:

代码语言:javascript
复制
s.shift(1) - s.shift(-1)
票数 2
EN

Stack Overflow用户

发布于 2018-08-22 14:27:18

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

使用shift(1)可以得到前一行,使用shift(-1)可以得到下一行。

从那里你需要计算previous - next

代码语言:javascript
复制
>>> 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51968722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档