【问题标题】:Num of occurances where Column difference in DataFrame satisfies a conditionDataFrame 中的列差异满足条件的出现次数
【发布时间】:2018-09-02 04:12:18
【问题描述】:

我有一个包含很多行的数据框,我只是在寻找满足条件的行数。
数据sn-p:

mydf:

           Date      Time    Open    High     Low   Close
143  07:08:2015  14:55:00  300.10  300.45  300.10  300.45
144  07:08:2015  15:00:00  300.50  300.95  300.45  300.90
145  07:08:2015  15:05:00  300.90  301.20  300.75  300.90
146  07:08:2015  15:10:00  300.85  301.40  300.75  301.40
147  07:08:2015  15:15:00  301.40  301.60  301.20  301.55
148  07:08:2015  15:20:00  301.45  301.55  301.10  301.40

我当前的代码,首先将所需的列分成2个系列,然后计算最后6个元素的出现次数

openpr = mydf['Open'] 
closepr = mydf['Close'] # 2 Series, one for Open and One for Close data 
differ  = abs(closepr - openpr) #I have a series list with absolute Difference.
myarr = differ[142:].values == 0 # last X elements  
sum(myarr) #Num of occurances with Zero Difference.

据我了解,有很多方法可以用最少的代码并直接使用 DF 本身来实现上述结果。

TIA

【问题讨论】:

  • 使用(df.Close - df.Open).eq(0).sum()?

标签: python pandas dataframe filter count


【解决方案1】:

我认为需要通过eq 比较==tail 的最后一个6 值和sum 的计数值:

out = mydf['Close'].tail(6).eq(mydf['Open'].tail(6)).sum()

您的解决方案应更改最后 6 个值,并在代码中添加 sub 以减少 ()

out = mydf['Close'].tail(6).sub(mydf['Open'].tail(6)).abs().eq(0).sum()

【讨论】:

    【解决方案2】:

    您不需要差异然后取绝对值只找到零。只需首先找到它们相等的地方。

    eval

    这是一个pandas.DataFrame 方法,允许字符串表示公式。事实证明,它在大型数据集上非常快。我发现它在很多情况下都非常易读。

    mydf.tail(6).eval('Close == Open').sum()
    

    如果您需要在某个增量范围内并且必须区分列

    mydf.tail(6).eval('abs(Close - Open) < 1e-6').sum() 
    

    isclose

    这是一个 Numpy 函数,它承认由于缺乏精度,浮点数本质上有点偏离。所以我们只想知道值是否足够接近。

    np.isclose(mydf.Open.tail(6), mydf.Close.tail(6)).sum()
    

    但是,使用 isclose 时更容易确定差异是否在某个增量内,因为内置容差参数

    np.isclose(mydf.Open.tail(6), mydf.Close.tail(6), atol=1e-6).sum()
    

    【讨论】:

    • 如果我希望差异是动态的(例如,0.05),我不认为我可以使用此代码。
    • 不正确。我将调整这两个选项来演示。
    • @suraj_Blore 帖子已更新。耶斯瑞尔的答案是一个很好的答案。希望这也有帮助。
    • 是的,如果可以的话,这个答案。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2021-12-05
    • 2022-01-14
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    相关资源
    最近更新 更多