不同长度的时间戳索引数据帧之间的差异



我有两个数据帧,它们都用时间戳值进行索引,如"2021-03-23 13:04:00.13400+00:00"。

我想在某些列上计算它们之间的差异,但问题是它们没有时间对齐,并且具有不同的行数。

有没有一种好的方法可以使所有元素的时间差小于特定量,并在其他情况下加入NaN?

编辑:

数据帧1:

|index| val1 | val 2 |
|--------------------------------| ---- | ---- |
|2021-03-23 13:04:00.134000+00:00| 200  | 50   |
|2021-03-23 13:34:00.134000+00:00| 100  | 10   |
|2021-03-23 14:04:00.134000+00:00| 100  | 10   |

数据帧2:

|index| val1 | val 2 |
|--------------------------------| ---- | ---- |
|2021-03-23 13:24:00.134000+00:00| 200  | 50   |
|2021-03-23 14:34:00.134000+00:00| 100  | 10   |

假设时间增量为20分钟的预期输出(数据帧1和数据帧2的列之间的差(:

|index| val1 | val 2 |
|--------------------------------| ---- | ---- |
|2021-03-23 13:04:00.134000+00:00| 0    | 0    |
|2021-03-23 13:44:00.134000+00:00| NaN  | NaN  |
|2021-03-23 15:04:00.134000+00:00| NaN  | NaN  |

首先使用merge_asof

df = pd.merge_asof(df1, 
df2, 
left_index=True, 
right_index=True,
tolerance=pd.Timedelta('20Min'),
direction='forward',
suffixes=('','_'))
print (df)
val1  val2  val1_  val2_
index                                                     
2021-03-23 13:04:00.134000+00:00   200    50  200.0   50.0
2021-03-23 13:34:00.134000+00:00   100    10    NaN    NaN
2021-03-23 14:04:00.134000+00:00   100    10    NaN    NaN

然后减去相同的列(差值仅_加到末尾(:

new = df.columns[df.columns.str.endswith('_')]
print (new)
Index(['val1_', 'val2_'], dtype='object')
orig = new.str.replace('_','')
print (orig)
Index(['val1', 'val2'], dtype='object')
df[orig] = df[orig].sub(df[new].to_numpy())
df = df.drop(new, axis=1)
print (df)
val1  val2
index                                       
2021-03-23 13:04:00.134000+00:00   0.0   0.0
2021-03-23 13:34:00.134000+00:00   NaN   NaN
2021-03-23 14:04:00.134000+00:00   NaN   NaN

最新更新