You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对按时间戳排序的pandas DataFrame列表应用merge_asof合并

合并多个排序后的DataFrame(使用merge_asof)

既然merge_asof仅支持两两合并,我们可以用functools.reduce来迭代处理整个DataFrame列表,把每次合并的结果作为下一次合并的左表,完成全量合并。

步骤说明:

  • 先给每个DataFrame的value列重命名,避免合并后列名重复(比如按序号加后缀)
  • 用reduce依次调用merge_asof完成所有DataFrame的合并

代码示例:

import pandas as pd
from functools import reduce

# 示例:创建3个已经按timestamp排序的DataFrame
df1 = pd.DataFrame({'timestamp': pd.to_datetime(['2023-01-01 00:00', '2023-01-01 00:02']), 'value': [10, 20]})
df2 = pd.DataFrame({'timestamp': pd.to_datetime(['2023-01-01 00:01', '2023-01-01 00:03']), 'value': [15, 25]})
df3 = pd.DataFrame({'timestamp': pd.to_datetime(['2023-01-01 00:00', '2023-01-01 00:02']), 'value': [12, 22]})

# 给每个DataFrame的value列重命名,避免合并后列名冲突
df_list = [df.rename(columns={'value': f'value_{i+1}'}) for i, df in enumerate([df1, df2, df3])]

# 使用reduce迭代合并所有DataFrame
merged_df = reduce(
    lambda left, right: pd.merge_asof(left, right, on='timestamp', direction='nearest'),
    df_list
)

print(merged_df)

关键参数说明:

  • on='timestamp':指定用于匹配的时间戳列(所有DataFrame必须包含该列,且已按其升序排序)
  • direction:可选'nearest'(匹配最近的时间戳)、'backward'(取当前时间戳之前最近的记录)、'forward'(取当前时间戳之后最近的记录),可根据业务需求调整

注意事项:

  • 必须确保所有输入的DataFrame都已按timestamp列升序排序,merge_asof要求左右表都满足排序条件
  • 如果各DataFrame时间范围不同,合并后会保留所有时间戳,缺失的匹配值会按direction规则填充

内容的提问来源于stack exchange,提问作者upchurch.quaid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:44:57