从同一Pandas数据帧中的不同时间减去值

2024-04-26 07:49:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个时间序列:

            value     identifier
2007-01-01  0.781611      55
2007-01-01  0.766152      56
2007-01-01  0.766152      57
2007-01-03  0.733152      57
2007-01-12  0.766152      57
2007-02-01  0.705615      55
2007-02-01  0.032134      56 
2007-02-07  0.132134      56 
2007-02-01  0.032134      57
2008-01-01  0.026512      55
2008-01-01  0.993124      56
2008-01-01  0.993124      57
2008-01-11  0.226512      56
2008-02-01  0.226420      55
2008-02-01  0.033860      56
2008-02-01  0.033860      57
2008-02-14  0.333860      55
2008-02-24  0.334860      57

现在我要计算不同时间增量的差异。我的第一个方法是

^{pr2}$

但如果不存在delta上完全相同的日期

'the label [2008-01-30 00:00:00] is not in the [index]'

所以这是不可能的。如何从请求的时间增量中获取最近的日期并计算差值?在


Tags: the方法inindexisvalue时间not
1条回答
网友
1楼 · 发布于 2024-04-26 07:49:36

如果索引是唯一的,可以使用DateTimeIndex.asof,如question所示。

另一种方法(来自同一个问题)是使用numpy.argmin来查找最近的日期。例如,你可以

In [138]: import numpy as np

In [139]: last_date = pd.Timestamp('2008-01-30')

In [140]: delta_30d = last_date - pd.Timedelta(30, 'D')

In [142]: np.argmin(np.abs(df.index - delta_30d))
Out[142]: 13

In [144]: df.iloc[13, :]
Out[144]: 
value          0.22642
identifier    55.00000
Name: 2008-02-01 00:00:00, dtype: float64

In [145]: df.iloc[np.argmin(np.abs(df.index - last_date))]['value'] - df.iloc[np.argmin(np.abs(df.index - delta_30))]['value']
Out[145]: 0.19990799999999997

相关问题 更多 >