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

pandas DataFrame中忽略秒值比对日期 实现跨表计数字段匹配更新的方法

高效实现方案

前置预处理

首先确保两个数据集的date字段为datetime类型(若已完成类型转换可跳过该步):

import pandas as pd

# 转换时间字段类型
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'])

生成分钟级匹配键

对第一份带随机秒值的数据集df1,使用pandas向量化方法将时间截断为整分钟格式,完全对齐第二份数据集的时间粒度:

# 将时间向下取整到分钟,秒值自动归零
df1['date_min'] = df1['date'].dt.floor('min')

(可选)同分钟多记录聚合

若df1中同一分钟存在多条记录,可根据业务需求先做聚合,避免后续匹配出现键重复问题:

# 示例为同分钟Count求和,可替换为max/mean等其他聚合逻辑
df1_agg = df1.groupby('date_min', as_index=False)['Count'].sum()

高效更新第二份数据集df2的Count值

以下两种方法均为向量化操作,无循环逻辑,可直接处理万级行数据,运行效率远高于逐行遍历。

方法1:字典映射(速度最优,适合大表场景)

将聚合后的时间-Count对转为字典,直接映射到df2的对应时间行,未匹配的位置保留原有值:

# 生成时间到计数的映射字典
count_map = dict(zip(df1_agg['date_min'], df1_agg['Count']))

# 映射并填充未匹配值,保留原有Count
df2['Count'] = df2['date'].map(count_map).fillna(df2['Count']).astype(int)

方法2:左连接合并(适合需保留源数据集其他字段的场景)

通过左连接将匹配值合并到df2,再做值填充:

# 左连接匹配计数
df2 = df2.merge(df1_agg, left_on='date', right_on='date_min', how='left')

# 用匹配到的新值替换原有值,未匹配的保留原有0
df2['Count'] = df2['Count_y'].fillna(df2['Count_x']).astype(int)

# 清理合并产生的冗余列
df2 = df2.drop(columns=['date_min', 'Count_x', 'Count_y'])

注意事项

  • 不要使用字符串格式化时间后再匹配的方案,容易因格式不一致出现匹配失败,直接使用datetime类型做计算可避免该问题。
  • 若同分钟存在多条df1记录,必须先聚合,否则会导致合并后df2行数膨胀、数据错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 00:54:03