我试图在数据框中添加一列,指示每行索引和固定时间戳的时差。数据框由datetimeindex和一些字符串列组成。
我用
d["diff"] = d.index-t0
计算所述时差。由于先前的过滤,最大可能的差值应该在10到20秒之间。但是,我经常会在一天之内略微变差(少1-10秒),即使实际差异大约是5秒。
我读到大熊猫的先前版本确实存在这个问题,但据说很长一段时间了。
我的解决方法是复制索引,将其转换为int64,将t0转换为int64,从所有行中减去t0,然后将diff列转换回timedeltas,但这看起来非常低效且难看。
PS:在OS X和Debian 8上都使用pandas 0.16.0。
编辑:根据要求,一个样本:
2013-12-12 13:50:48 # t0
timestamp
2013-12-16 13:50:52 4 days 00:00:04
Name: diff, dtype: timedelta64[ns]
我刚注意到,日期完全关闭,我使用indexer_between_time()获取索引,只查看时间,而不是日期。这更令人困惑。
indices = df.index.indexer_between_time(start_time=index,end_time=index+DateOffset(seconds=t_offset) )
答案 0 :(得分:1)
因此,最终的原因是您使用between_time
查找所需范围内的时间。不幸的是,between_time
实际上并没有找到某个范围内的时间,它找到的时间与当天的相同时间相匹配,无论哪一天(我之前确实犯了同样的错误)。要找到特定范围内的时间,您可以这样做:
end_time = index + DateOffset(seconds=t_offset)
df.index[index:end_time]
如果您的DateTimeIndex
是单调的/有序的,这就可以了,如果不是,您可能想先排序。