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

Pandas合并两个DataFrame时如何向前查找匹配时间戳对应数据

方案1:使用merge_asof实现近似时间匹配(对应你提到的「向前查找匹配记录」思路)

pd.merge_asof是Pandas专门设计用于有序键近似匹配的工具,完全匹配你的需求,代码简洁执行效率高:

import pandas as pd

# 你的原始数据
df = pd.DataFrame(
    {'ID': [1000, 1000, 1002, 1003, 1004],
        'Start Date': [
            pd.Timestamp('2021-01-01'),
            pd.Timestamp('2021-01-01'),
            pd.Timestamp('2021-04-01'),
            pd.Timestamp('2021-01-01'),
            pd.Timestamp('2021-01-01')
    ],
        'Name': ['Joe', 'Bill', 'Bill', 'Martin', 'Jane']
    }
)

df2 = pd.DataFrame(
    {'ID': [1000, 1002, 1002, 1003, 1004],
        'Start Date': [
            pd.Timestamp('2021-01-01'),
            pd.Timestamp('2021-01-01'),
            pd.Timestamp('2021-04-05'),
            pd.Timestamp('2021-01-01'),
            pd.Timestamp('2021-01-10')
    ],
        'Position': ['Operator', 'Operator', 'Manager', 'Operator', 'Operator']})

# 必须先对两个表按ID和Start Date排序,merge_asof要求匹配的时间列有序
df_sorted = df.sort_values(['ID', 'Start Date'])
df2_sorted = df2.sort_values(['ID', 'Start Date'])

# 执行近似匹配
# direction参数说明:
# - forward:匹配df2中大于等于df当前Start Date的第一个记录
# - backward:匹配df2中小于等于df当前Start Date的最后一个记录(和补全日期前向填充的效果一致)
result = pd.merge_asof(
    df_sorted,
    df2_sorted,
    on='Start Date',
    by='ID',
    direction='forward' # 根据你的实际匹配逻辑调整即可
)
print(result)

方案2:补全df2的日期后常规合并(对应你提到的「补全第二张DataFrame数据」思路)

如果后续需要用到全量日期做其他计算,可以先补全df2每个ID的所有日期记录,再做普通合并:

# 确定需要覆盖的全量日期范围
min_date = min(df['Start Date'].min(), df2['Start Date'].min())
max_date = max(df['Start Date'].max(), df2['Start Date'].max())
all_dates = pd.date_range(start=min_date, end=max_date, freq='D')

# 按ID分组补全所有日期,前向填充职位信息
df2_full = df2.set_index('Start Date').groupby('ID', group_keys=False).apply(
    lambda x: x.reindex(all_dates, method='ffill')
).reset_index(names='Start Date')

# 常规合并即可得到完整结果
result = df.merge(df2_full, how='left', on=['ID', 'Start Date'])
print(result)

内容的提问来源于stack exchange,提问作者Nichlas H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:06:04