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
相关产品推荐
相关产品推荐

