【问题标题】:Python convert conditional array to dataframePython将条件数组转换为数据框
【发布时间】:2020-08-09 14:32:05
【问题描述】:

我有一个包含以下信息的数据框:

    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
..   ..

请帮忙...

【问题讨论】:

    标签: python pandas numpy numpy-ndarray


    【解决方案1】:

    只需稍微扩展您的代码,即可根据需要将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
    

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 1970-01-01
      • 2018-12-21
      • 2017-01-29
      • 2022-11-04
      • 2019-04-13
      • 2017-10-19
      • 2020-05-29
      • 2017-02-19
      相关资源
      最近更新 更多