熊猫在一系列日期的24小时内查找行

时间:2018-11-29 20:03:51

标签: python pandas

我有一个时间序列数据的DataFrame,并且在下午2点还有80天的一系列时间戳记对象。我的时间序列数据是针对我的序列中每天上午9:30到下午4点之间的5天。我需要获取一个真相系列,以了解是否在系列中的时间戳之前的24小时内有一行。

这是我到目前为止所拥有的:

td = datetime.timedelta(days=-1)
df['fomc'] = df['time'].transform(lambda x: (x > dates_time + td).any() and (x < dates_time).any())

我意识到这是不正确的,但是Pandas内有什么方法可以做到这一点?

这是几行的例子

time                | prc
0   1994-09-26 13:38:49  46.00
1   1994-09-26 13:57:15  46.04
2   1994-09-26 14:05:34  46.02
3   1994-09-26 14:07:18  46.13

然后我有一个看起来像这样的系列:

0   1994-09-27
1   1994-11-15
2   1994-12-20

所以应该是以下系列:

0   False
1   False
2   True
3   True

由于DataFrame的最后两个条目位于24小时内,因此该系列的第一个条目之前。

编辑:示例输入/输出,更正。

1 个答案:

答案 0 :(得分:1)

这将是O(m * n)解决方案,但它应比使用numpy广播的pandas方法要快

df.time=pd.to_datetime(df.time)
v=df.time.values
v1=(v-s.values[:,None])/np.timedelta64(1, 'h')

np.any((v1>-24)&(v1<0),0)
Out[424]: array([False, False,  True,  True])