我有一个两列框架,看起来是这样的:
value,Sequence
12506,-1
12501,-2
12513,-3
12513,1
12521,2
12501,3
12583,-1
12594,-2
12598,1
12589,-1
12615,1
12615,2
12611,3
12573,-1
12593,-2
12564,-3
我想要一个新的数据框架,计算值是组合标签。
如何按顺序添加:
(1)(值= 12501)按标签-2
(数值= 12513)按标签-3
标签(-3)-标签(-2)
12501 - 12513 = -12
2)(数值= 12521)按标签2,
(数值= 12501)按标签3
标签(2)-标签(3)
12521 - 12501 = 20
如果在标签(-2,2)之后没有标签(-3,3),并且有标签(-1,1),则计算如下
(3)(值= 12594)按标签-2
(值= 12598)按标签1
标签(-2)-标签(1)
12594 - 12598 = -4
如果在标签(-1,1)之后有(1,-1),则不会进行计算。
我想要一个这样的数据框架:
Calculation
-12
20
-4
4
-29
使用Pandas可以做到这一点吗?
发布于 2022-08-30 13:10:03
是的,我只是做了,但我只是不知道为什么,我如何设法理解你想要什么。(编辑:我不认为,但相当接近)
import pandas as pd
import numpy as np
d = {'value':[12506,12501,12513,12513,
12521,12501,12583,12594,
12598,12589,12615,12615,
12611,12573,12593,12564],
'Sequence':[-1,-2,-3,1,2,3,-1,-2,1,-1,1,2,3,-1,-2,-3]}
df = pd.DataFrame(data=d)
df['value_shifted'] = df["value"].shift(-1)
df['Sequence_shifted'] = df["Sequence"].shift(-1)
new_df = df.where(np.abs(df['Sequence']) == 2).dropna()
new_df['calculation'] = new_df['value'] - new_df['value_shifted']
结果(new_df
):
value Sequence value_shifted Sequence_shifted calculation
1 12501.0 -2.0 12513.0 -3.0 -12.0
4 12521.0 2.0 12501.0 3.0 20.0
7 12594.0 -2.0 12598.0 1.0 -4.0
11 12615.0 2.0 12611.0 3.0 4.0
14 12593.0 -2.0 12564.0 -3.0 29.0
https://stackoverflow.com/questions/73542523
复制相似问题