python - 在 Pandas 的下一个 K 连续行中找到最高值?

标签 python pandas

我正在处理时间序列价格数据,我想知道在接下来的 K 行中每一行的价格可以达到多高。

我可以考虑使用 .argmax() 以某种方式实现它,同时根据时间过滤数据帧,但是必须有一个更简单的内置解决方案。

例如:

  Price
 1 $10
 2 $11
 3 $15
 4 $18
 5 $13
 6 $4
 7 $25

对于 K=2,这是我想要的:

  Price   Highest_In_Next_2_Rows
1 $10     $15
2 $11     $18
3 $15     $18
4 $18     $13
5 $13     $25
6 $4      $25
7 $25     NaN

最佳答案

您可以使用 pandas 滚动和移位功能实现此目的。

基本上,您会找到前 k 个观测值的滚动最大值,然后将序列移动 k,这样 t 的最大值就是在 (t+1, ..., t+k) 上计算得出的值。

import pandas as pd
import numpy as np

ts = pd.Series([10, 11, 15, 18, 13, 4, 25])
k = 2

res = ts.rolling(k).max().shift(-k)

pd.concat([ts, res], axis = 1) 

输出:

#     0     1
# 0  10  15.0
# 1  11  18.0
# 2  15  18.0
# 3  18  13.0
# 4  13  25.0
# 5   4   NaN
# 6  25   NaN

这个解决方案的问题是它没有给出最后 k 个观测值的结果。

解决方法如下: 您以相反的顺序考虑该系列并计算过去 k 个观察值的滚动最大值(在至少有一个观察值时给出结果)。 然后您延迟了一天,因为您不希望包含今天的价格,您再次反转以返回到原始订单。

res = ts[::-1].rolling(k,1).max().shift(1)[::-1]

它完全复制了所需的输出:

#    0     1
#0  10  15.0
#1  11  18.0
#2  15  18.0
#3  18  13.0
#4  13  25.0
#5   4  25.0
#6  25   NaN

关于python - 在 Pandas 的下一个 K 连续行中找到最高值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43921322/

相关文章:

python - django 不提供静态文件

python - 具体情况不会通过第 8 行 elif :

python - 使用 Python 的 AMP 堆栈

python - 同行重置 Django 连接

python - 如何编辑 matplotlib 条形图中 x 位置的默认索引值

python - Pandas 按季度结束日期过滤

Python: += 不支持的操作数类型: 'int' 和 'NoneType

java - 将 JSON 数据展平为单独的行

python - 如何使用 Pandas 操作 .csv 文件中的数据并访问特定的行和列?

Python:在给定索引值处将数据帧插入到更大的数据帧中