熊猫的时间差异

时间:2014-10-07 21:02:30

标签: python numpy pandas

假设我有一个包含多个时间戳和值的数据框。我想每Δ values / Δt秒测量一次2.5。 Pandas是否提供时间差异化的任何工具?

                              time_stamp   values
19492   2014-10-06 17:59:40.016000-04:00  1832128                                
167106  2014-10-06 17:59:41.771000-04:00  2671048                                
202511  2014-10-06 17:59:43.001000-04:00  2019434                                
161457  2014-10-06 17:59:44.792000-04:00  1294051                                
203944  2014-10-06 17:59:48.741000-04:00   867856

2 个答案:

答案 0 :(得分:7)

肯定会这样。首先,您需要将索引转换为pandas date_range格式,然后使用可用于与该类索引的系列/数据帧的自定义偏移函数。有用的文档here。阅读有关偏移别名的更多here

此代码应将您的数据重新采样为2.5秒间隔

#df is your dataframe
index = pd.date_range(df['time_stamp'])
values = pd.Series(df.values, index=index)

#Read above link about the different Offset Aliases, S=Seconds
resampled_values = values.resample('2.5S') 

resampled_values.diff() #compute the difference between each point!

应该这样做。

答案 1 :(得分:0)

如果您真的想要时间导数,那么还需要除以自上次采样以来的时间差(增量时间, dt

一个例子:

dti = pd.DatetimeIndex([
    '2018-01-01 00:00:00',
    '2018-01-01 00:00:02',
    '2018-01-01 00:00:03'])

X = pd.DataFrame({'data': [1,3,4]}, index=dti)

X.head()
                    data
2018-01-01 00:00:00 1
2018-01-01 00:00:02 3
2018-01-01 00:00:03 4

您可以使用DatetimeIndex上的diff()查找时间增量。这为您提供了一系列类型的时间增量。不过,您只需要几秒钟的值即可

dt = pd.Series(df.index).diff().dt.seconds.values

dXdt = df.diff().div(dt, axis=0, )

dXdt.head()
                    data
2018-01-01 00:00:00 NaN
2018-01-01 00:00:02 1.0
2018-01-01 00:00:03 1.0

如您所见,此方法考虑到前两个值之间只有两秒钟,而最后两个值之间只有一秒钟。 :)