我有一个时间序列数据的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小时内,因此该系列的第一个条目之前。
编辑:示例输入/输出,更正。
答案 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])