Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于另一列在pandas中创建要素(即,当要素从正变为负时)_Python_Pandas_Feature Engineering_Technical Indicator - Fatal编程技术网

Python 基于另一列在pandas中创建要素(即,当要素从正变为负时)

Python 基于另一列在pandas中创建要素(即,当要素从正变为负时),python,pandas,feature-engineering,technical-indicator,Python,Pandas,Feature Engineering,Technical Indicator,我有以下数据集: 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数据帧上创建一个新特征(列) 通过一个例

我有以下数据集:

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_信号从0变为1

当ROC_9从正变为负时,我想将ROC9_信号从0变为-1

查看数据,我希望ROC9_信号从0变为-1,因为值已经从0.16(正)变为-0.006(负)

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

查看数据,我希望ROC9_信号从0变为-1,因为值已经从0.20(正)变为-0.008(负)

我只想将发生更改的行从0更改为1或从0更改为-1,其他行必须保持为0

然后,我将应用相同的逻辑创建momentum10\u信号列和chalkin\u money\u flow\u信号列。因此,我想要一个可以应用于不同列而不是手动的解决方案

提前谢谢你的帮助

这是完整数据的外观:


您可以使用
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

谢谢你的帮助!这是一个非常有效的解决问题的方法