Python 从同一数据帧中的不同时间中减去值
我有这样一个时间序列:Python 从同一数据帧中的不同时间中减去值,python,pandas,Python,Pandas,我有这样一个时间序列: 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 2
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
现在我想用不同的时间增量计算差异。我的第一个方法是
last_date = '2008-02-30'
dt = datetime.timedelta(days=30)
delta_30d = datetime.datetime.strptime(last_date, "%Y-%m-%d") - dt
df.loc[last_date]['value'] - df.loc[delta_30d]['value']
但是如果时间差上不存在完全相同的日期,我得到
'the label [2008-01-30 00:00:00] is not in the [index]'
所以这是不可能的。如何从请求的时间增量中获取最近的日期并计算差值?如果索引是唯一的,则可以使用
DateTimeIndex.asof
,如下所示
另一种方法(来自同一个问题)是使用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
谢谢是否有一种方法可以将此应用于列中的所有值?如果索引中有重复的日期值,则此方法实际上无法正常工作。