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

比对不同长度DataFrame时间戳并完成指定格式合并

问题描述

我有两个DataFrame:

import pandas as pd

df1 = pd.DataFrame({
    'date': ['2023-01-01 16:00:00', '2023-01-01 16:15:00', '2023-01-01 16:30:00',
             '2023-01-01 16:45:00', '2023-01-01 17:00:00', '2023-01-01 17:15:00',
             '2023-01-01 17:30:00'],
    'col1': [100, 120, 140, 160, 200, 430, 890],
    'col2': [200, 400, 500, 700, 300, 200, 100]
})

df2 = pd.DataFrame({
    'date': ['2023-01-01 16:00:00', '2023-01-01 16:15:00', '2023-01-01 17:00:00'],
    'col3': [1, 1, 1]
})

已通过df2['date'].isin(df1['date']).all()验证df2['date']的所有时间戳都存在于df1['date']中。

需要将df1与df2合并,生成如下格式的新DataFrame df_new:

df_new = pd.DataFrame({
    'date': ['2023-01-01 16:00:00', '2023-01-01 16:15:00', '2023-01-01 16:30:00',
             '2023-01-01 16:45:00', '2023-01-01 17:00:00', '2023-01-01 17:15:00',
             '2023-01-01 17:30:00'],
    'col1': [100, 120, 140, 160, 200, 430, 890],
    'col2': [200, 400, 500, 700, 300, 200, 100],
    'col3': [1, 1, 0, 0, 1, 0, 0]
})

要求保留df1的所有行,匹配时间戳的col3值为1,不匹配的为0。

解决方案

方法1:左连接合并后填充缺失值

利用左连接保留df1的全部行,再将合并后col3的缺失值替换为0:

df_new = df1.merge(df2, on='date', how='left').fillna({'col3': 0})
# 可选:将col3转为整数类型
df_new['col3'] = df_new['col3'].astype(int)

方法2:直接生成匹配标记列

通过判断df1['date']是否在df2['date']的集合中,直接创建col3列,这种方法效率更高:

date_set = set(df2['date'])
df_new = df1.copy()
df_new['col3'] = df1['date'].isin(date_set).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:55:13