python - Python将条件数组转换为数据框
问题描述
我有一个包含以下信息的数据框:
ticker date close gap
0 BHP 1981-07-31 0.945416 -0.199458
1 BHP 1981-08-31 0.919463 -0.235930
2 BHP 1981-09-30 0.760040 -0.434985
3 BHP 1981-10-30 0.711842 -0.509136
4 BHP 1981-11-30 0.778578 -0.428161
.. ... ... ... ...
460 BHP 2019-11-29 38.230000 0.472563
461 BHP 2019-12-31 38.920000 0.463312
462 BHP 2020-01-31 39.400000 0.459691
463 BHP 2020-02-28 33.600000 0.627567
464 BHP 2020-03-31 28.980000 0.784124
我开发了以下代码来查找行超过 0 时的位置:
zero_crossings =np.where(np.diff(np.sign(BHP_data['gap'])))[0]
这将返回:
array([ 52, 54, 57, 75, 79, 86, 93, 194, 220, 221, 234, 235, 236,
238, 245, 248, 277, 379, 381, 382, 383, 391, 392, 393, 395, 396],
dtype=int64)
我需要能够执行以下操作:
'gap'
计算交叉点之间的月数0
- 删除月份数为的项目
<12
- 平均剩余月份
但是,我不知道如何把它nd.array
变成有用的东西,我可以从中进行计算。当我尝试:
pd.DataFrame(zero_crossings)
我得到以下df,它只返回索引:
0
0 52
1 54
2 57
3 75
4 79
5 86
.. ..
请帮忙...
解决方案
只需稍微扩展您的代码以zero_crossings
根据需要进入原始数据帧。
import pandas as pd
import numpy as np
BHP_data = pd.DataFrame({'gap': [-0.199458, 0.472563, 0.463312, 0.493318, -0.509136, 0.534985, 0.784124]})
BHP_data['zero_crossings'] = 0
zero_crossings = np.where(np.diff(np.sign(BHP_data['gap'])))[0]
print(zero_crossings) # [0 3 4]
# Updates the column to 1 based on the 0 crossing
BHP_data.loc[zero_crossings, 'zero_crossings'] = 1
print(BHP_data)
输出
gap zero_crossings
0 -0.199458 1
1 0.472563 0
2 0.463312 0
3 0.493318 1
4 -0.509136 1
5 0.534985 0
6 0.784124 0
推荐阅读
- javascript - 为什么我的个人资料图像尽管发生了变化仍然是匿名的?
- reactjs - 如何在 react-router-dom v6 的路由组件中添加道具
- javascript - 从获取请求中访问对象 - javascript/react
- android - 如何隔离异步请求
- python - RuntimeError:即使在 pip install ninja 之后,Ninja 也需要加载 C++ 扩展
- database - Oracle PLSQL 最小化多个 IF 条件或动态准备
- sql - 如何在聚合子查询之前选择其他列
- javascript - Firestore 嵌套地图(对象),点表示法不起作用
- javascript - 如何使用超测试检查数组是否包含定义的值?
- react-native - React Native Textinput 超出父视图