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

如何在无循环下基于另一DataFrame的日期与名称匹配取值?

解决方案

要实现这个需求,核心是通过精准的键匹配关联两个DataFrame,而非用isin这类批量筛选方式(后者无法把筛选结果精准对应回原DataFrame的每一行)。具体步骤如下:

  1. 先给df_op生成目标日期列(当前日期延后2天):
df_op['target_date'] = df_op['Date'] + pd.DateOffset(days=2)
  1. 用merge方法,以Name和目标日期为关联键,和df_quotes做左连接,获取对应Close值:
df_op = df_op.merge(
    df_quotes[['Name', 'Date', 'Close']],
    left_on=['Name', 'target_date'],
    right_on=['Name', 'Date'],
    how='left'
)
  1. 最后重命名匹配到的Close列为Next,并清理临时列:
df_op.rename(columns={'Close': 'Next'}, inplace=True)
df_op.drop(columns=['target_date', 'Date_y'], inplace=True)
# 若需保留原Date列名称,可补充:df_op.rename(columns={'Date_x': 'Date'}, inplace=True)

为什么之前的方法行不通?

你之前用的isin是批量筛选逻辑,它只能从df_quotes里挑出所有日期符合「df_op日期延后2天」且名称在df_op中的行,但这些行无法和df_op的每一行精准对应——比如多个行可能共享同一名称和目标日期,或是顺序打乱,导致无法正确填充到df_op的对应位置。而merge是基于指定键(Name+日期)做一对一/多对一的关联,能保证每一行的匹配准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:32:21