DataFrame中的列差异满足条件的出现次数

时间:2018-09-02 04:12:19

标签: python pandas dataframe filter count

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

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

2 个答案:

答案 0 :(得分:1)

我认为需要将eq的{​​{1}}与tail的最后==值进行比较,并以6的值进行计数:

sum

您的解决方案应更改为最后6个值,并在代码中添加sub减少out = mydf['Close'].tail(6).eq(mydf['Open'].tail(6)).sum()

()

答案 1 :(得分:1)

您无需求差,然后仅取绝对值​​即可找到零。只需首先找到它们相等的位置即可。

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

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

pandas.DataFrame

如果您需要在某个增量之内并且必须更改列数

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

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

这是一个Numpy函数,它承认由于缺乏精度,浮点数固有地有点偏离。因此,我们只想知道值是否足够接近。

isclose

但是,由于内置公差参数,在使用np.isclose(mydf.Open.tail(6), mydf.Close.tail(6)).sum() 时更容易确定差是否在某个增量内

isclose