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()