python - 根据另一列在 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)
它是关于股票价格的指标,即变化率。
当熊猫数据框上的当前特征从正变为负时,我想编写一个代码,在熊猫数据框上创建一个新特征(列),反之亦然。
通过一个例子更容易解释:让我们使用特性ROC9
。
我创建了一个名为的新变量ROC9_signal
并将其设置为0
:
`price_data['ROC9_signal'] = 0`
当ROC_9
从negative
到 时positive
,我想改变ROC9_signal
从0
到1
。
当ROC_9
从positive
到 时negative
,我想改变ROC9_signal
从0
到-1
。
查看数据,我想ROC9_signal
从 更改0
为-1
,因为值已从0.16
( positive
) 变为-0.006
( negative
)。
查看数据,我希望ROC_9
信号从0
变为1
,因为值已从 - 0.11
( negative
) 变为0.05
( positive
)。
查看数据,我想ROC9_signal
从 更改0
为-1
,因为该值已从0.20
(正)变为 - 0.008
(negative
)。
只有发生更改的行我想从 0 更改为 1 或 0 更改为 -1,其他行必须保持为 0。
然后,我将应用相同的逻辑来创建一momentum10_signal
列和一chalkin_money_flow_signal
列。因此,我想要一个可以应用于不同列而不是手动的解决方案。
在此先感谢您的帮助。
这是完整数据的样子:
解决方案
数据
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)
price_data['ROC9_signal'] = 0
price_data
使用布尔选择找到两个不同的交叉点:
ZeroCrossing1=price_data.ROC_9.ge(0)&price_data.ROC_9.shift(1).le(0)#from 0 to 1
ZeroCrossing2=price_data.ROC_9.ge(0)&price_data.ROC_9.shift(-1).le(0)# from 0 to -1.
将过零可能的结果放入列表中
ZeroCrossingOutcomes=[1,-1]
price_data['ROC9_signal']
使用np.where有条件地计算
price_data['ROC9_signal']=np.select([ZeroCrossing1,ZeroCrossing2],ZeroCrossingOutcomes,0)
print(price_data)
或者使用嵌套np.where(if condition, ye, else no)
price_data['ROC9_signal']=np.where(ZeroCrossing1,1,np.where(ZeroCrossing2,-1,0)))
推荐阅读
- excel - 在 VBA 范围比较中查找行值
- ubuntu - 如何在 ubuntu 上重新启动 nginx Web 服务器而不会出错?
- reactjs - 有没有办法让整个页面在单击按钮之前不可编辑?
- mongodb - 查找特定用户 mongodb 最喜欢的产品
- html - 如何在点击时隐藏垂直导航并显示相应的内容(移动网站上的导航带有后退按钮)
- swift - 应用程序快速显示具有不同字符的文本
- ruby - 在 rub 中获取特定主机的 IP 地址
- java - 如何第一次为 dynamo db 设置 java?
- wordpress - Wordpress 分类档案抛出 404
- ajax - 如何在 JSF 2.0 中使用 AJAX 来获取鼠标结束的单词?