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

Python中基于日期匹配为DataFrame新增列的问题(行数不一致)

基于日期匹配将DF1列值复制到DF2的实现方法

先给你搭个场景示例,方便对照理解:

import pandas as pd

# DF1:日期无重复,包含要复制的A列
df1 = pd.DataFrame({
    '日期': ['2023-01-01', '2023-01-02', '2023-01-03'],
    'A': [10, 20, 30]
})

# DF2:存在重复日期,需要新增列匹配A列值
df2 = pd.DataFrame({
    '日期': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-04'],
    '其他列': ['a', 'b', 'c', 'd']
})

方法1:用merge(直观易读,推荐新手)

用左连接保留DF2所有行,匹配DF1的A列值,匹配不到的会显示NaN:

# 只取DF1的日期和A列做连接,避免引入多余列
df2 = df2.merge(df1[['日期', 'A']], on='日期', how='left')

方法2:用map(代码更简洁)

先把DF1转成「日期:A值」的字典,再给DF2的日期列做映射:

# 构造日期到A值的映射字典
date_a_map = df1.set_index('日期')['A'].to_dict()
# 新增A列
df2['A'] = df2['日期'].map(date_a_map)

关键注意事项

  • 确保两个DF的日期列格式完全一致,如果是字符串要统一格式,或者转成datetime类型:
df1['日期'] = pd.to_datetime(df1['日期'])
df2['日期'] = pd.to_datetime(df2['日期'])
  • 如果DF1本身有重复日期,merge会产生重复行,这时候先处理DF1的重复值:
# 比如保留每个日期的第一条记录
df1 = df1.drop_duplicates(subset='日期', keep='first')
# 或者取每个日期A列的均值
df1 = df1.groupby('日期')['A'].mean().reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:17:14