首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算每对行之间的差,然后每2行跳一次

计算每对行之间的差,然后每2行跳一次
EN

Stack Overflow用户
提问于 2022-11-12 09:09:16
回答 2查看 32关注 0票数 1

我需要计算每个连续对之间的差异,但是所有当前的解决方案,如rollingdiff,都不会跳转。

为了解释,我需要得到这样的output

代码语言:javascript
复制
  a output
0 5 -3
1 8 -2
2 2 nan
3 4 nan

所以(5-8)和(2-4)是我的结果。

我试过这个不“跳”的:

代码语言:javascript
复制
df['output'] = df['C'] - df['C'].shift(-1)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-12 09:24:31

我会用numpy来做这个:

代码语言:javascript
复制
N = 2
df.loc[df.index[:N],
       'output'] = -np.diff(df['a'].to_numpy().reshape(N, -1, order='F')))

熊猫:

代码语言:javascript
复制
N = 2
df['output'] = df['a'].iloc[:N].rsub(df['a'].iloc[N:].values)

产出:

代码语言:javascript
复制
   a  output
0  5    -3.0
1  8    -2.0
2  2     NaN
3  4     NaN

使用N=3的其他示例

代码语言:javascript
复制
   a  output
0  5    -3.0
1  8    -4.0
2  7    -6.0
3  2     NaN
4  4     NaN
5  1     NaN
票数 1
EN

Stack Overflow用户

发布于 2022-11-12 09:46:30

使用groupby函数的另一种方式是:

代码语言:javascript
复制
df['output']=df.groupby(df.index // 2).diff(-1)
df['output'].iloc[1:]=df['output'].iloc[1:].shift(-1)
df
'''
    a   output
0   5   -3.0
1   8   -2.0
2   2   nan
3   4   nan

'''

不同的数据就是这样工作的,我不知道你到底想要什么。如果这是错误的,请说明它作为一个评论。我会删除它。

代码语言:javascript
复制
df=pd.DataFrame(data={'a':[5,8,2,4,10,20,10,232,323]})
df['output']=df.groupby(df.index // 2).diff(-1)
df['output'].iloc[1:]=df['output'].iloc[1:].shift(-1)
df
'''
    a   output
0   5   -3.0
1   8   -2.0
2   2   nan
3   4   -10.0
4   10  nan
5   20  -222.0
6   10  nan
7   232 nan
8   323 nan

'''
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74411661

复制
相关文章

相似问题

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