我需要计算每个连续对之间的差异,但是所有当前的解决方案,如rolling、diff,都不会跳转。
为了解释,我需要得到这样的output列
a output
0 5 -3
1 8 -2
2 2 nan
3 4 nan所以(5-8)和(2-4)是我的结果。
我试过这个不“跳”的:
df['output'] = df['C'] - df['C'].shift(-1)发布于 2022-11-12 09:24:31
我会用numpy来做这个:
N = 2
df.loc[df.index[:N],
'output'] = -np.diff(df['a'].to_numpy().reshape(N, -1, order='F')))熊猫:
N = 2
df['output'] = df['a'].iloc[:N].rsub(df['a'].iloc[N:].values)产出:
a output
0 5 -3.0
1 8 -2.0
2 2 NaN
3 4 NaN使用N=3的其他示例
a output
0 5 -3.0
1 8 -4.0
2 7 -6.0
3 2 NaN
4 4 NaN
5 1 NaN发布于 2022-11-12 09:46:30
使用groupby函数的另一种方式是:
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
'''不同的数据就是这样工作的,我不知道你到底想要什么。如果这是错误的,请说明它作为一个评论。我会删除它。
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
'''https://stackoverflow.com/questions/74411661
复制相似问题