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

如何使用Pandas基于时间匹配并合并两个DataFrame的燃料类型数据?

需求实现方案

问题说明

现有两个DataFrame:

import pandas as pd

df2 = pd.DataFrame({
    'Date Time': ['25/10/2023  09:00:00', '25/10/2023  16:35:00', '26/10/2023  09:00:00'],
    'Fuel Type': ['D1', pd.NA, 'D2']
}, index=[1,2,3])

df1 = pd.DataFrame({
    'Date Time': ['25/10/2023 09:24', '25/10/2023 13:24', '26/10/2023 09:55'],
    'Test Fuel': [4196, 3465, 4566]
}, index=[1,2,3])

需要给df1添加Fuel Type列,规则是:从df2匹配对应时间区间的燃料类型,未更新时默认保持上一次的类型(初始为D1),最终得到目标结果。

实现步骤

  1. 转换时间格式:将两个DataFrame的Date Time列转为datetime类型,确保时间可正确排序和匹配。
  2. 填充空值:对df2中空的Fuel Type值使用前向填充(ffill),延续上一个有效的燃料类型。
  3. 按时间匹配:使用pandas.merge_asof()方法,按时间顺序将df1的每条记录与df2中最近的不晚于当前时间的记录匹配,获取对应燃料类型。

完整代码

import pandas as pd

# 构造原始DataFrame
df2 = pd.DataFrame({
    'Date Time': ['25/10/2023  09:00:00', '25/10/2023  16:35:00', '26/10/2023  09:00:00'],
    'Fuel Type': ['D1', pd.NA, 'D2']
}, index=[1,2,3])

df1 = pd.DataFrame({
    'Date Time': ['25/10/2023 09:24', '25/10/2023 13:24', '26/10/2023 09:55'],
    'Test Fuel': [4196, 3465, 4566]
}, index=[1,2,3])

# 转换时间列为datetime类型
df2['Date Time'] = pd.to_datetime(df2['Date Time'], format='%d/%m/%Y %H:%M:%S')
df1['Date Time'] = pd.to_datetime(df1['Date Time'], format='%d/%m/%Y %H:%M')

# 填充df2的Fuel Type空值
df2['Fuel Type'] = df2['Fuel Type'].ffill()

# 按时间排序(merge_asof要求两个DataFrame都按key列排序)
df2_sorted = df2.sort_values('Date Time')
df1_sorted = df1.sort_values('Date Time')

# 使用merge_asof匹配
result = pd.merge_asof(df1_sorted, df2_sorted, on='Date Time', direction='backward')

# 恢复原始索引顺序
result = result.loc[df1.index]

print(result)

结果输出

Date Time  Test Fuel Fuel Type
1 2023-10-25 09:24:00       4196        D1
2 2023-10-25 13:24:00       3465        D1
3 2023-10-26 09:55:00       4566        D2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:27:28