Pandas 根据时间 window 合并两个时间序列数据帧 (cut/bin/merge)

Pandas merge two time series dataframes based on time window (cut/bin/merge)

有 750k 行 df 和 15 列和 pd.Timestamp 作为 index 称为 ts。 我近乎实时地处理实时数据到毫秒。

现在我想将一些从 df_stats 中的更高时间分辨率派生的统计数据作为新列应用到大 df 中。 df_stats 的时间分辨率为 1 分钟。

$ df
+----------------+---+---------+
| ts             | A | new_col |
+----------------+---+---------+
| 11:33:11.31234 | 1 | 81      |
+----------------+---+---------+
| 11:33:11.64257 | 2 | 81      |
+----------------+---+---------+
| 11:34:10.12345 | 3 | 60      |
+----------------+---+---------+
$ df_stats
+----------------+----------------+
| ts             | new_col_source |
+----------------+----------------+
| 11:33:00.00000 | 81             |
+----------------+----------------+
| 11:34:00.00000 | 60             |
+----------------+----------------+

目前我有下面的代码,但是效率很低,因为它需要遍历完整的数据。

我想知道使用 pd.cutbinpd.Grouper 是否有更简单的解决方案?或者其他合并两个索引上的时间段的东西?

df_stats['ts_timeonly'] = df.index.map(lambda x: x.replace(second=0, microsecond=0))
df['ts_timeonly'] = df.index.map(lambda x: x.replace(second=0, microsecond=0))
df = df.merge(df_stats, on='ts_timeonly', how='left', sort=True, suffixes=['', '_hist']).set_index('ts')

让我们尝试一些新的东西reindex

df_stats=df_stats.set_index('ts').reindex(df['ts'], method='nearest')
df_stats.index=df.index

df=pd.concat([df,df_stats],axis=1)

df=pd.merge_asof(df, df_stats, on='ts',direction='nearest')