繁体   English   中英

根据条件和前一行值从其他列填充 Pandas Dataframe 列

[英]Populate Pandas Dataframe column from other columns based on a condition and previous row value

我正在尝试使用 python 数据帧来实现以下Pinescript语句。

Hlv = float(na)
Hlv := close > sma_high ? 1 : close < sma_low ? -1 : Hlv[1]

第 1 行 - Hlv - 基本上是一个浮点变量名

第 2 行 - 为变量分配新值,三元运算符 (if-elseif-else)。 赋值Hlv[1]表示先前的值( Hlv的值,后退 1 步(行))

现在在 Dataframe 中实现它,具有以下列和数据->

Current ->

Close SMA_High SMA_Low 
 10      12      5
 12      14      6
 13      17      7

现在,我想添加另一个名为 HLV 的列,用于存储每一行的 Hlv 值,基于我们将在 pinescript line2 中计算的条件。

Expected ->

Close SMA_High SMA_Low  Hlv
 10      9       5       1     // close > sma_high = 1
 5       14      6       -1    // close < sma_low = -1
 13      17      7       -1    // here no conditions are met , so previous value of Hlv is taken i.e -1

我无法弄清楚如何使用来自其他列的值生成这个新列,甚至无法弄清楚如何获取该列的先前值。

我浏览了这个答案,可以看到我们可以在如下条件下添加值 -

df['Hlv'] = pd.NA
df.loc[df.Close>df.SMA_High,'Hlv'] = 1
df.loc[df.Close<df.SMA_Low,'Hlv'] = -1

但仍然不确定如果不满足条件/默认情况下如何填充先前的值 提前致谢。

import numpy as np
df['Hlv'] = np.NaN
df.loc[df.Close>df.SMA_High,'Hlv'] = 1
df.loc[df.Close<df.SMA_Low,'Hlv'] = -1
df.fillna(method='ffill',inplace=True)

更容易预先设置默认值,例如:

df['Hlv'] = 0  # This is your default value
df.loc[df.Close > df.SMA_High, 'Hlv'] = 1
df.loc[df.Close < df.SMA_Low, 'Hlv'] = -1

如果您仍想ffill上一行,请参考您的默认值:

df.Hlv.replace(0, method='ffill')  # 0 being your default value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM