根据另一个时间序列找出熊猫序列中值的差异

弗朗西斯库里沃

我在熊猫中有一个金融时间序列,在趋势为正时,时间序列“位置”的值为1,否则为-1。位置系列不断交替1和-1。是否有功能或聪明的方法来找出正周期的开始和结束之间的差异?更具体地说,我想对所有增量进行求和,但是为了做到这一点,我努力寻找一种方法来确定趋势的起点和终点。谢谢

乔特贝

假设您有一个像这样的数据框:

         date  value
0  2020-11-12     10
1  2020-11-13     12
2  2020-11-14     15
3  2020-11-15     17
4  2020-11-16     17
5  2020-11-17     11
6  2020-11-18     12
7  2020-11-19      9
8  2020-11-20      7

并且您想要计算上升时间段的开始值和结束值之间的差,那么您将得到以下结果:

          start_date  first_value  last_value  difference
trend_no                                                 
1         2020-11-12           10          17           7
2         2020-11-17           11          12           1

通过执行以下代码:

# work out the trend of the series
df['difference']= df['value'] - df['value'].shift(1).fillna(0)
df['trend']= np.sign(df['difference'])

# work out the start and end of an ascending series
df['start_ascend']= (df['trend'].shift(-1) > df['trend']).astype('bool')
df.loc[0, 'start_ascend']= True
df['end_ascend']= (df['trend'].shift(-1) < df['trend']).astype('bool')

# assign a number to the ascending trends
# note, that the trends are not yet limited correctly
df['trend_no']= df['start_ascend'].cumsum()

# now work out the borders of the ascending trends
# all records that belong to an ascending trend
# will have df['keep_mask'] == True
df['keep_mask']= np.nan
indexer= df['end_ascend'].shift(1).fillna(False) 
df.loc[indexer, 'keep_mask']= 0.0
df.loc[df['start_ascend'], 'keep_mask']= 1.0
df['keep_mask']= df['keep_mask'].fillna(method='ffill').astype('bool')

# now do the final aggregation
df_res= df[df['keep_mask']].groupby(df['trend_no']).agg(start_date=('date', 'first'), first_value=('value', 'first'), last_value=('value', 'last'))
df_res['difference']= df_res['last_value'] - df_res['first_value']
df_res

如果您想了解上述步骤实际上做了什么,可以看一下数据框:

         date  value  trend  start_ascend  end_ascend  trend_no  keep_mask
0  2020-11-12     10    1.0          True       False         1       True
1  2020-11-13     12    1.0         False       False         1       True
2  2020-11-14     15    1.0         False       False         1       True
3  2020-11-15     17    1.0         False        True         1       True
4  2020-11-16     17    0.0         False        True         1      False
5  2020-11-17     11   -1.0          True       False         2       True
6  2020-11-18     12    1.0         False        True         2       True
7  2020-11-19      9   -1.0         False       False         2      False
8  2020-11-20      7   -1.0         False       False         2      False

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在熊猫中将一个时间序列插值到另一个

来自分类Dev

用另一个时间序列更新时间序列

来自分类Dev

如何使用Promql获取不在另一个时间序列中的一个时间序列的数据点?

来自分类Dev

将时间序列数据映射/采样到另一个时间序列 db2

来自分类Dev

仅当该时间序列超过另一个时间序列时,才在该时间序列上使用 findpeaks 函数

来自分类Dev

将特定的Arima模型应用于R中的另一个时间序列

来自分类Dev

如何在 ts 对象中插入 NA 值以填充另一个时间序列的空白?

来自分类Dev

用不同的颜色绘制一个时间序列

来自分类Dev

用不同的颜色绘制一个时间序列

来自分类Dev

根据另一个变量创建日期序列

来自分类Dev

条件格式(如果一个时间大于另一个时间)

来自分类Dev

根据另一个表中值之间的差异删除SQL表中的行

来自分类Dev

QML动画的另一个时间来源?

来自分类Dev

将时间序列除以另一个不规则的时间序列

来自分类Dev

根据另一个序列化查询的结果进行序列化查询

来自分类Dev

R根据data.frame中的两列创建一个时间序列作为xts索引

来自分类Dev

多次出现时替换一个时间序列中的一个值

来自分类Dev

检查一个时间范围是否进入另一个时间范围

来自分类Dev

将一个时间范围缩小到另一个时间范围的算法

来自分类Dev

转到序列图中的另一个序列?

来自分类Dev

从另一个序列生成新的Scala序列

来自分类Dev

多个序列与另一个序列的条件乘法

来自分类Dev

Clojure:如何测试一个序列是否是另一个序列的“子序列”

来自分类Dev

从两个日期时间之间的时差返回另一个时间

来自分类Dev

ggplot2:将多个箱形图安排为一个时间序列

来自分类Dev

一个时间序列中的多个geom_rect

来自分类Dev

每 15 分钟在 R 中创建一个时间序列

来自分类Dev

如何根据另一个活动的可排序列表对列表进行重新排序?

来自分类Dev

根据另一个排序列表在python中对列表进行排序

Related 相关文章

  1. 1

    在熊猫中将一个时间序列插值到另一个

  2. 2

    用另一个时间序列更新时间序列

  3. 3

    如何使用Promql获取不在另一个时间序列中的一个时间序列的数据点?

  4. 4

    将时间序列数据映射/采样到另一个时间序列 db2

  5. 5

    仅当该时间序列超过另一个时间序列时,才在该时间序列上使用 findpeaks 函数

  6. 6

    将特定的Arima模型应用于R中的另一个时间序列

  7. 7

    如何在 ts 对象中插入 NA 值以填充另一个时间序列的空白?

  8. 8

    用不同的颜色绘制一个时间序列

  9. 9

    用不同的颜色绘制一个时间序列

  10. 10

    根据另一个变量创建日期序列

  11. 11

    条件格式(如果一个时间大于另一个时间)

  12. 12

    根据另一个表中值之间的差异删除SQL表中的行

  13. 13

    QML动画的另一个时间来源?

  14. 14

    将时间序列除以另一个不规则的时间序列

  15. 15

    根据另一个序列化查询的结果进行序列化查询

  16. 16

    R根据data.frame中的两列创建一个时间序列作为xts索引

  17. 17

    多次出现时替换一个时间序列中的一个值

  18. 18

    检查一个时间范围是否进入另一个时间范围

  19. 19

    将一个时间范围缩小到另一个时间范围的算法

  20. 20

    转到序列图中的另一个序列?

  21. 21

    从另一个序列生成新的Scala序列

  22. 22

    多个序列与另一个序列的条件乘法

  23. 23

    Clojure:如何测试一个序列是否是另一个序列的“子序列”

  24. 24

    从两个日期时间之间的时差返回另一个时间

  25. 25

    ggplot2:将多个箱形图安排为一个时间序列

  26. 26

    一个时间序列中的多个geom_rect

  27. 27

    每 15 分钟在 R 中创建一个时间序列

  28. 28

    如何根据另一个活动的可排序列表对列表进行重新排序?

  29. 29

    根据另一个排序列表在python中对列表进行排序

热门标签

归档