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

如何合并两个DataFrame:保留首个DataFrame时间戳,缺失值填充NaN

解决方法

你需要的是**左连接(left join)**而非内连接或concat,具体实现步骤如下:

1. 统一时间戳类型

首先确保两个DataFrame的timestamp列均为datetime类型(seconddf的原始数据是字符串,必须转换才能正确匹配):

import pandas as pd

# 生成firstdf(原代码不变)
daterange = pd.date_range(start='1/1/2023 09:30:00', end='1/3/2023 09:35:00', freq='min') 
daterange_keep = (pd.DatetimeIndex(pd.to_datetime(daterange))
          .indexer_between_time('09:30', '09:35') 
       )
firstdf= pd.DataFrame(daterange[daterange_keep])
firstdf.columns = ['timestamp']

# 转换seconddf的时间戳类型
seconddf = pd.DataFrame({'timestamp': ['2023-01-01 09:30:00', '2023-01-01 09:32:00', '2023-01-01 09:34:00', '2023-02-01 09:30:00'], 'value': [3,5,7,9]})
seconddf['timestamp'] = pd.to_datetime(seconddf['timestamp'])

2. 左连接合并DataFrame

使用merge的how='left'参数,会保留firstdf的所有时间戳,匹配seconddf中对应的值,无匹配的位置自动填充NaN,同时自动丢弃seconddf中不在firstdf范围内的数据:

merged_df = firstdf.merge(seconddf, on='timestamp', how='left')

3. 重命名value列

用rename方法独立完成列名修改,替换为你需要的名称:

merged_df = merged_df.rename(columns={'value': '目标列名'})

最终输出示例

运行后merged_df的核心结果片段如下:

timestamp目标列名
2023-01-01 09:30:003
2023-01-01 09:31:00NaN
2023-01-01 09:32:005
2023-01-01 09:33:00NaN
2023-01-02 09:30:00NaN

关于concat的说明

concat仅用于按行/列直接拼接DataFrame,不支持基于键(时间戳)的匹配合并场景,你的需求本质是基于时间戳的左连接匹配,merge(how='left')才是正确方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:05:08