给定一个来自 csv 的 pandas 数据框,如下所示:
DATE,DESCRIPTION,SELL,BUY:
2014-01-16 15:25:57.817728,"text1",7,10
2014-01-16 15:26:01.445759,"text2",5,8
2014-01-16 15:26:57.856787,"text3",4,10
...
检查“买入”列中的值在给定时间范围内是否低于某个阈值(例如,在 . 分钟 40 和 . 分钟 50 之间)然后返回该行的最好方法是什么数字 ? (仅当发生交叉时,如果值在给定时间之前已经低于特定阈值则不)
最佳答案
假设您的行按时间递增顺序排序,就像您的示例一样(并且“DATE”是数据列而不是索引),那么这是实现您想要的效果的一种方法:
穿越THRESHOLD
下方在第 t 行意味着 BUY < threshold
在 t 和 BUY >= THRESHOLD
在 t-1 时。假设D
是你的数据框,这是通过条件实现的:
cond = (D['BUY'] < threshold) & (D['BUY'].shift(1) >= threshold)
。
获取 START_TIME
之间的所有交叉时间行索引和END_TIME
:
d = D[cond]
cross_row_inds = d[(d['DATE'] >= START_TIME) & (d['DATE'] <= END_TIME)].index
您也可以先选择时间,如果DATE
,这可能会稍微快一些。是排序的日期时间索引而不是数据列。但是,根据您的语义,您可能需要在 START_TIME 之前包含一个时间实例。
关于python - 检查某个值在时间范围内是否超过阈值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21248159/