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

基于匹配条件从另一DataFrame为Pandas添加新列

Pandas根据匹配条件为DataFrame添加新列

现有两个Pandas DataFrame定义如下:

import pandas as pd
df1 = pd.DataFrame({'Date': [0, 2, 3], 'Id':['A','B','C'], 'Country': ['US', 'CA', 'DE']})
df2 = pd.DataFrame({'Date': [0, 1, 2, 3], 'US': [10, 20, 30, 40], 'CA':[5, 10, 15, 20], 'DE':[100, 200, 300, 400]})

需求是为df1添加一列New,该列取值为df2中对应Date和Country的匹配值,最终期望结果如下:

df1 = pd.DataFrame({'Date': [0, 2, 3], 'Id':['A','B','C'], 'Country': ['US', 'CA', 'DE'], 'New':[10, 15, 400]})

方法一:重塑df2为长格式后合并

先将宽格式的df2转换为长格式,让国家代码成为单独的列,再与df1按Date和Country进行左合并:

# 重塑df2:把列名(US/CA/DE)转为Country列,对应数值转为New列
df2_melted = df2.melt(id_vars='Date', var_name='Country', value_name='New')
# 合并两个DataFrame,保留df1的所有行
df1 = df1.merge(df2_melted, on=['Date', 'Country'], how='left')

方法二:使用lookup函数(Pandas ≥0.23版本适用)

利用lookup方法直接根据Date和Country匹配对应值,写法更简洁:

# 将df2的Date设为索引,再通过lookup匹配
df1['New'] = df2.set_index('Date').lookup(df1['Date'], df1['Country'])

两种方法执行后,df1都会得到符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:22:15