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

如何从另一DataFrame选取数据为当前DataFrame创建新列

错误原因
  • 语法层面:你写的apply代码缺少右括号,本身无法正常解析运行
  • 逻辑层面:df2[df2['Date'] == row.Date]['Indicator']返回的是Series对象而非单个数值,直接赋值给df1的列会出现维度不匹配错误
  • 性能层面:逐行遍历的apply方式在数据量较大时执行效率极低,不推荐使用
正确实现方法

两种常用的高效实现方式,按需选择即可:

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

直接按日期字段对两个表做左连接,保留销售表的所有行,匹配到的经济指标自动填充,匹配不到的日期默认填充NaN:

import pandas as pd

# 先统一日期格式,避免匹配失败
df1['Date'] = pd.to_datetime(df1['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])

# 左连接合并,并重命名指标列为Rate
df1 = df1.merge(df2, on='Date', how='left').rename(columns={'Indicator': 'Rate'})

方法2:使用map映射(写法更简洁,适合单字段匹配场景)

把经济指标表转成日期为索引的映射关系,直接对销售表的日期列做映射:

import pandas as pd

df1['Date'] = pd.to_datetime(df1['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])

df1['Rate'] = df1['Date'].map(df2.set_index('Date')['Indicator'])
结果说明

用你提供的示例数据执行后,最终df1的输出如下:

Date分类销售额Rate
2021-05-04A561.4
2021-05-04B401.4
2021-05-05B401.8
2021-05-07A20NaN

如果需要处理NaN值,可以使用df1['Rate'] = df1['Rate'].fillna(默认值)填充你需要的默认数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:57:05