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

如何在Pandas中基于日期匹配将另一DataFrame的列添加到目标DataFrame

匹配两个DataFrame并添加指定列的解决方案

针对你描述的需求——把d2的Change列通过d1的Date_with_affect字段与d2的Date索引匹配后添加到d1,这里有两种实用的方法,同时会明确日期不匹配时的处理逻辑:

方法1:使用map()快速映射

这种方法简单直接,适合只需要提取单个列的场景。因为d2的索引是Date,我们可以直接用d1的Date_with_affect去映射d2的Change值:

# 将d2的Change列映射到d1
d1['Change'] = d1['Date_with_affect'].map(d2['Change'])

日期不匹配的处理:

如果d1中某行的Date_with_affect在d2的索引中找不到对应值,该行的Change会被自动填充为NaN(缺失值)。比如如果d1有一行的Date_with_affect是2018-03-07,而d2没有这个日期的索引,那么这行的Change就是NaN。


方法2:使用pd.merge()灵活连接

如果你需要更灵活的匹配规则(比如控制是否保留不匹配的行),可以用pandas的合并函数,它支持多种连接方式:

我们可以直接利用d2的索引作为匹配键,不需要额外转换列:

import pandas as pd

# 左连接:保留d1的所有行,匹配不到的Change列填NaN
d1_merged = pd.merge(
    d1,
    d2[['Change']],  # 只选择需要的Change列,减少数据量
    left_on='Date_with_affect',
    right_index=True,
    how='left'
)

不同连接方式的日期不匹配处理:

  • how='left'(推荐):保留d1的所有行,d2中没有对应日期的行,Change列填充NaN,完全符合你的需求。
  • how='inner':只保留d1和d2中日期完全匹配的行,不匹配的行直接从结果中丢弃。
  • how='outer':保留d1和d2的所有行,双方不匹配的字段都填充NaN。
  • how='right':保留d2的所有行,d1中没有对应日期的行,d1的列会填充NaN(这个场景下一般用不到)。

注意事项:日期格式统一

确保d1的Date_with_affect和d2的索引日期格式一致,否则会出现匹配失败的情况。如果格式不一致,可以先转换为datetime类型:

# 转换d1的日期列
d1['Date_with_affect'] = pd.to_datetime(d1['Date_with_affect'])
# 转换d2的索引为datetime
d2.index = pd.to_datetime(d2.index)

用上面的方法,你示例中的Id89行的Change列就会成功填充为0.5啦!

内容的提问来源于stack exchange,提问作者Ala Głowacka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:05:01