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

Pandas如何匹配两个DataFrame的sp列并新增对应date字段

Pandas 按公共列匹配添加新列实现方案

你需要实现的是按sp列做关联匹配,把查找表的date字段挂载到业务表上,属于最常用的表关联操作,两种常用实现方式如下:


方法1:merge 左连接(最通用,适合多字段匹配场景)

直接用pandas内置的merge方法,指定关联键为sp,连接方式选左连接,保证原业务表所有行不丢失:

import pandas as pd

# 先复现你的样例数据
df1 = pd.DataFrame({
    "name": ["ccs", "ccs", "ccs", "ccs"],
    "sp": [2, 4, 5, 7],
    "val": [4.5, 5, 3, 8]
})

df_lookup = pd.DataFrame({
    "date": ["2013-10-01", "2013-11-01", "2013-12-01", "2014-01-01", "2014-02-01", "2014-03-01", "2014-04-01"],
    "sp": [1, 2, 3, 4, 5, 6, 7]
})

# 核心匹配代码
df_result = df1.merge(df_lookup, on="sp", how="left")

运行后输出结果:

name  sp  val        date
0  ccs   2  4.5  2013-11-01
1  ccs   4  5.0  2014-01-01
2  ccs   5  3.0  2014-02-01
3  ccs   7  8.0  2014-04-01

注意:你给出的预期结果中sp=7对应的date写为2014-05-01,和查找表内的实际值不符,属于笔误,匹配结果以查找表存储的2014-04-01为准。


方法2:map 映射(性能更好,适合单字段匹配场景)

如果只需要匹配单个字段,先把查找表转成{匹配键: 目标值}的字典,再用map直接给原表新增列,大数据量下速度比merge快:

# 构造sp到date的映射字典
sp_to_date = df_lookup.set_index("sp")["date"].to_dict()
# 直接给原df1加新列
df1["date"] = df1["sp"].map(sp_to_date)

运行后得到的结果和merge方法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:30:47