计算两行之间的时间差
我正在尝试用 shift()
来计算两行之间的时间差,但遇到了一个意外的错误。我可能漏掉了什么明显的东西。
df['Delta'] = (df.index - df.index.shift(1))
这个语句产生了一个 ValueError: Cannot shift with no offset
的错误。我到底漏掉了什么呢?
2 个回答
4
可能会让人感到困惑的是,在1.0版本之前,Series.shift和Index.shift的功能并不完全相同,后者主要是针对时间序列(TimesSeries)才有意义。最简单的做法可能是把你的索引(index)作为一列添加进来。
df['index_col'] = df.index
df['Delta']=(df['index_col'] - df['index_col'].shift(1))
5
有两件事:
- 如果你有一个时间索引(DatetimeIndex),那么使用
shift
方法可以让你的数据按时间段移动。如果你的索引没有频率,你需要通过freq
这个参数来告诉shift
方法,比如freq='s'
就是让数据移动一秒钟。 - 你不能直接用减法来处理两个索引对象,这样会得到一个差集操作,具体可以查看这个链接:http://pandas.pydata.org/pandas-docs/stable/indexing.html#set-operations-on-index-objects
如果你只是想要索引中两个连续值之间的差,可以使用 diff
方法(这个方法在一个序列上使用,比 shift
和减法要简单一些):
df['index_col'] = df.index
df['Delta'] = df['index_col'].diff()