Python中如何计算秒索引DataFrame各时间步的时间差?
解决方案
问题分析
你遇到的'Series' object has no attribute 'total_seconds'错误,是因为total_seconds()是单个Timedelta对象的方法,不能直接作用于Timedelta类型的Series。更关键的是,你之前的思路有误——把索引转成Timedelta存储到dTime,得到的是索引对应的时间长度,而非相邻时间步的差值。
正确实现
由于你的索引本身就是以秒为单位的数值,直接对索引做差分即可得到时间差,步骤如下:
- 计算索引的相邻差值:用
df.index.diff()获取当前时间步与上一步的索引差值(单位:秒) - 填充第一个值:第一个时间步没有上一步,用
fillna(0)将其设为0
对应的代码:
df['dTime'] = df.index.diff().fillna(0)
验证结果
用你的示例数据测试,会得到你期望的输出:
| Time | Prod | dTime |
|---|---|---|
| 662558400 | 1.975595 | 0 |
| 662558400 | 1.975916 | 0 |
| 662558400 | 1.976396 | 0 |
| 662558500 | 1.977118 | 100 |
| 66258500 | 1.9782 | -602000 |
(注:你示例中最后一个索引可能存在输入错误,实际差值会根据真实索引计算)
补充说明
如果你的索引是datetime类型而非数值秒数,才需要先转成Timedelta差值,再用dt.total_seconds()提取秒数:
# 针对datetime索引的情况 df['dTime'] = df.index.diff().dt.total_seconds().fillna(0)
内容的提问来源于stack exchange,提问作者Yogi
相关产品推荐
相关产品推荐

