计算两行之间的时间差

6 投票
2 回答
5037 浏览
提问于 2025-04-18 17:24

我正在尝试用 shift() 来计算两行之间的时间差,但遇到了一个意外的错误。我可能漏掉了什么明显的东西。

df['Delta'] = (df.index - df.index.shift(1))

这个语句产生了一个 ValueError: Cannot shift with no offset 的错误。我到底漏掉了什么呢?

2 个回答

4

可能会让人感到困惑的是,在1.0版本之前,Series.shiftIndex.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()

撰写回答