Pandas计算“自高以来的酒吧”

eagi6jfj  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(101)

我试图计算一个滚动的“酒吧,因为高”的数字重置为新高是在Pandas。我可以计算滚动高点,但不能计算自那以来的行数。
例如:

import pandas as pd

df = pd.DataFrame([0,1,2,3,10,3,4,5,25],columns=['price'])
df['high'] = df['price'].rolling(window=100000,min_periods=1).max()

在这种情况下,期望的输出将是:

df['barssincehigh'] = [0,0,0,0,0,1,2,3,0]

但我想不出一种方法来计算最近的高点以来的行数。

mepcadol

mepcadol1#

如果你的窗口是一个任意大的数字,并且你实际上想计算整个 Dataframe 的累积最大值,你可以用途:

df["high"] = df.price.cummax()
# replaces:
df['high'] = df['price'].rolling(window=100000,min_periods=1).max()

要计算每个新最大值的计数,请执行以下操作:

df["bars_since_high"] = df.groupby("high").cumcount()

这种分组将起作用,因为必然存在唯一的组,因为每个最大值***必须***大于所有先前的最大值。

相关问题