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

基于FMS_ID匹配与日期区间筛选的df1 code1字段更新需求

按日期区间匹配替换DataFrame字段值

初始数据(df1)

FMS_IDdatecode1
188662022-01-013103
188662022-01-223103
188672022-10-233103
188672022-06-043103

匹配数据(df2)

FMS_IDFdateTdatecode2
188662021-01-012022-01-211126
188662022-01-222022-11-018102
188672022-05-032022-08-013101
188672022-09-042022-11-011150

需求说明

当df1与df2的FMS_ID匹配,且df1的date处于df2对应的Fdate与Tdate区间内时,将df1的code1字段替换为df2的code2字段,最终输出更新后的df1。

预期输出

FMS_IDdatecode1
188662022-01-011126
188662022-01-228102
188672022-10-231150
188672022-06-043101

实现方案

步骤1:转换日期列类型

先将所有日期列转为datetime类型,确保区间判断逻辑准确:

import pandas as pd

df1['date'] = pd.to_datetime(df1['date'])
df2['Fdate'] = pd.to_datetime(df2['Fdate'])
df2['Tdate'] = pd.to_datetime(df2['Tdate'])

步骤2:匹配并替换字段

通过apply逐行匹配对应FMS_ID的日期区间,完成字段替换:

def update_code(row):
    # 筛选当前FMS_ID下,日期区间包含当前行date的记录
    matched_record = df2[(df2['FMS_ID'] == row['FMS_ID']) & 
                         (df2['Fdate'] <= row['date']) & 
                         (df2['Tdate'] >= row['date'])]
    # 有匹配则返回code2,无匹配则保留原code1
    return matched_record['code2'].iloc[0] if not matched_record.empty else row['code1']

# 批量更新code1字段
df1['code1'] = df1.apply(update_code, axis=1)

执行上述代码后,df1即可得到预期的更新结果。

内容的提问来源于stack exchange,提问作者user1465454

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:01:09