【问题标题】:create a feature in pandas based on another column (i.e. when it goes from positive to negative)根据另一列在熊猫中创建一个特征(即当它从正面变为负面时)
【发布时间】:2020-09-20 03:23:57
【问题描述】:

我有以下数据集:

data = {'ROC_9': [0.006250, 0.087230, 0.045028, 0.165738, -0.006993, -0.432736, -0.11162, 0.057466, 0.203138, -0.008234]}

price_data = pd.DataFrame (data)

它是一个股票价格的指标,即变化率。

我想编写一个代码,当 Pandas 数据框上的当前特征从正变为负时,在 Pandas 数据框上创建新特征(列),反之亦然。

通过一个例子更容易解释:让我们使用 ROC9 的功能。

我创建了一个名为 ROC9_signal 的新变量并将其设置为 0:

price_data['ROC9_signal'] = 0

当 ROC_9 从负变为正时,我想将 ROC9_signal 从 0 更改为 1。

当 ROC_9 从正变为负时,我想将 ROC9_signal 从 0 更改为 -1。

查看数据,我希望 ROC9_signal 从 0 变为 -1,因为该值已从 0.16(正)变为 -0.006(负)。

查看数据,我希望 ROC_9 信号从 0 变为 1,因为该值已从 -0.11(负)变为 0.05(正)。

查看数据,我希望 ROC9_signal 从 0 变为 -1,因为该值已从 0.20(正)变为 -0.008(负)。

只有发生变化的那一行我要从0变成1或0变成-1,其他行必须保持为0。

然后我将应用相同的逻辑来创建一个momentum10_signal 列和一个chalkin_money_flow_signal 列。因此,我想要一个可以应用于不同列而不是手动的解决方案。

提前感谢您的帮助。

这是完整数据的样子:

Full Data

【问题讨论】:

    标签: python pandas feature-engineering technical-indicator


    【解决方案1】:

    您可以使用np.sign 提取符号。像这样的:

    signs = np.sign(price_data.ROC_9)
    price_data['signal'] = np.sign(signs.diff()).fillna(0)
    

    输出:

          ROC_9  signal
    0  0.006250     0.0
    1  0.087230     0.0
    2  0.045028     0.0
    3  0.165738     0.0
    4 -0.006993    -1.0
    5 -0.432736     0.0
    6 -0.111620     0.0
    7  0.057466     1.0
    8  0.203138     0.0
    9 -0.008234    -1.0
    

    【讨论】:

    • 感谢您的帮助!这是解决问题的一种非常有效的方法
    猜你喜欢
    • 2020-09-20
    • 2023-02-05
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多