Python中如何跨DataFrame按ID和日期匹配数据生成新列
pandas跨表匹配字段实现方案
核心思路
先将宽格式的df2转为按「ID+日期」唯一标识的长格式,再通过双字段匹配和df1合并即可。
实现代码
1. 宽表转长表
import pandas as pd # 转换df2宽表为可匹配的长格式 df2_long = df2.melt( id_vars = ["ID", "City"], var_name = "Date", value_name = "New" )
2. 双字段合并匹配
# 按ID和Date两个字段左连接,得到带New列的df1 df1 = df1.merge( df2_long[["ID", "Date", "New"]], on = ["ID", "Date"], how = "left" )
可选:日期格式统一(避免字符串匹配异常)
如果两个表的日期存储格式有差异,先统一转成datetime类型再合并:
df1["Date"] = pd.to_datetime(df1["Date"], format="%d/%m/%Y") df2_long["Date"] = pd.to_datetime(df2_long["Date"], format="%d/%m/%Y")
运行结果
最终得到的df1如下:
ID Date New 0 90 02/01/2021 14 1 101 01/01/2021 15 2 30 12/01/2021 13
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

