检查值是否在一个时间范围内超过阈值的最好方法

时间:2014-01-21 02:44:46

标签: python pandas

鉴于来自csv的pandas Dataframe看起来像这样:

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
...

最好的方法是检查BUY列中的值是否在给定时间范围内超过某个阈值,例如,例如,在.minute 40和.minute 50之间,然后返回行号码? (仅当交叉发生时,如果在给定时间内价值已经低于某个阈值,则不会发生交叉)

1 个答案:

答案 0 :(得分:3)

假设您的行按递增的时间顺序排序,就像在您的示例中一样(并且'DATE'是数据列而不是索引),那么这是实现您想要的一种方法:

在第t行的THRESHOLD以下交叉意味着t为BUY < threshold,t-1为BUY >= THRESHOLD。假设D是您的数据框,这是通过条件实现的:

cond = (D['BUY'] < threshold) & (D['BUY'].shift(1) >= threshold)

获取START_TIMEEND_TIME之间的所有杂交时间行索引:

d = D[cond]

cross_row_inds = d[(d['DATE'] >= START_TIME) & (d['DATE'] <= END_TIME)].index

您还可以先选择时间,如果DATE是排序的日期时间索引而不是数据列,则可能会稍快一些。但是,根据您的语义,您可能需要在START_TIME之前包含一个时间实例。