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

Python中高效匹配不同长度DataFrame日期列并关联销售数据

高效实现日度数据到分钟级数据的匹配(替代嵌套循环)

核心思路

抛弃嵌套循环,利用pandas的向量化操作实现类似Excel VLOOKUP的匹配逻辑——这类操作经过底层C级优化,处理大数据集的效率远高于逐行循环。

步骤1:统一日期格式

先把两个DataFrame的Date列从字符串转为pandas日期类型,避免因格式差异导致匹配失败:

import pandas as pd

# 转换日度数据的日期列(格式对应示例'2/1/2022':月/日/年)
df_daily['Date'] = pd.to_datetime(df_daily['Date'], format='%m/%d/%Y')
# 转换分钟级数据的日期列
df_minute['Date'] = pd.to_datetime(df_minute['Date'], format='%m/%d/%Y')

步骤2:选择高效匹配方法

方法一:使用pd.merge()(类似VLOOKUP精确匹配)

通过左连接将日度数据的Sales列匹配到分钟级数据中,保留分钟级数据的所有行:

# 仅保留df_daily中需要匹配的列,避免合并多余数据
df_merged = pd.merge(df_minute, df_daily[['Date', 'Sales']], on='Date', how='left')
  • how='left'确保df_minute的所有行都被保留,若某行找不到对应日期的销售额,Sales列会填充NaN,和VLOOKUP找不到匹配值的行为一致。

方法二:使用map()(字典映射,效率更优)

先将日度数据转为「日期-销售额」的字典,再通过映射快速填充分钟级数据:

# 构建日期到Sales的映射字典
sales_map = df_daily.set_index('Date')['Sales'].to_dict()
# 映射到分钟级数据
df_minute['Sales'] = df_minute['Date'].map(sales_map)
  • 字典查找是O(1)时间复杂度,处理14万行数据几乎瞬间完成,在多数场景下比merge()更快。

效率差异说明

嵌套循环是逐行的Python级操作,存在大量性能开销;而merge()和map()都是向量化批量操作,基于底层C实现,处理大数据集时效率能提升几个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:50:35