【问题标题】:Populate Pandas Dataframe column from other columns based on a condition and previous row value根据条件和前一行值从其他列填充 Pandas Dataframe 列
【发布时间】:2022-01-11 19:04:15
【问题描述】:

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

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

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

我查看了this 的答案,可以看到我们可以在以下条件下添加值 -

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

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

【问题讨论】:

    标签: python pandas


    【解决方案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.fillna(method='ffill',inplace=True) 将使用前一个值填充值,因为最初我们将np.NAN 分配给整个列
    • 更多详情请参考此链接pandas.pydata.org/docs/reference/api/…
    猜你喜欢
    • 2020-11-14
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2019-06-06
    • 2023-02-09
    • 1970-01-01
    • 2021-04-29
    • 2019-11-21
    相关资源
    最近更新 更多