Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧中的列差异满足条件时发生的次数_Python_Pandas_Dataframe_Filter_Count - Fatal编程技术网

Python 数据帧中的列差异满足条件时发生的次数

Python 数据帧中的列差异满足条件时发生的次数,python,pandas,dataframe,filter,count,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 3

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

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

我认为需要通过
eq
=
与最后的
6
值进行比较,并通过
sum
对值进行计数:

out = mydf['Close'].tail(6).eq(mydf['Open'].tail(6)).sum()
您的解决方案应针对最后6个值进行更改,也应针对代码中较少的
()
添加:

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

你们不需要求差,然后取绝对值,只要找到零的位置。只要找到他们第一个相等的地方

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

mydf.tail(6).eval('Close == Open').sum()
如果你需要在某个delta中,并且必须对列进行差分

mydf.tail(6).eval('abs(Close - Open) < 1e-6').sum() 
但是,由于内置的公差参数,在使用
isclose
时,确定差值是否在某个增量内更容易

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

使用
(df.Close-df.Open).eq(0).sum()
?如果我希望差异是动态的(例如(.05),我认为我不能使用此代码。不正确。我将调整这两个选项以演示。@suraj_Blore帖子已更新。耶斯雷尔的回答很好。希望这也是有帮助的。是的,这个答案如果可以的话。
np.isclose(mydf.Open.tail(6), mydf.Close.tail(6), atol=1e-6).sum()