![](/img/trans.png)
[英]Populate a new pandas dataframe column with names of other columns based on their row value
[英]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.