如果除DataFrame中最近的行外,该行是列中最近n行的最低值,则返回



我有以下Dataframe:

DataFrame

我想创建一个名为'is_new_low'的新列,它包含一个布尔值,如果:

  • 关联的行'close'值小于最近2000行的最小'low'值,但忽略最近20行的

即,如果当前'close'大于'low'从5(或任何数字=<</p> 从当前索引开始计数的最近1980行中所有'low'值小于-20,仍然返回True。

Else返回False。

这是我目前想到的:

df = pd.read_csv("eurusd.csv", names =['time','open', 'high', 'low','close'])
df.loc[df['close'] < df['low'].rolling(2000).min(), 'is_new_low'] = True
df.loc[df['close'] > df['low'].rolling(2000).min(), 'is_new_low'] = False
df.loc[df['close'] == df['low'].rolling(2000).min(), 'is_new_low'] = False

但是这只是在每行返回false,因为我不知道如何忽略最后20行,行'low'永远不会大于行'close'。

感谢你花时间帮助我。

您可以采用您所采用的2000个窗口大小的滚动方法,在取最小值之前将每个窗口切片至最后20个元素:

df['is_new_low'] = df['close'] < df.rolling(2000)['low'].apply(lambda x: x[:-20].min())

最新更新