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

基于日期列将DataFrame指定列的值替换为另一个DataFrame的值

问题描述

现有两个Pandas DataFrame:

  • df1包含date、key1、key2列,数据如下:
date                   key1     key2
01/01/2020  0:00:00    1         11
01/01/2020  0:30:00    2         12
01/01/2020  1:00:00    3         13
01/01/2020  1:30:00    4         14
  • df2包含date、key1列,数据如下:
date                   key1     
01/01/2020  0:00:00    888            
01/01/2020  1:00:00    888             

需求:根据date列匹配,将df1中对应日期的key1值替换为df2中的key1值,最终得到结果:

date                   key1     key2
01/01/2020  0:00:00    888       11
01/01/2020  0:30:00    2         12
01/01/2020  1:00:00    888       13
01/01/2020  1:30:00    4         14
解决方案

以下是几种高效实现的方法:

方法1:字典映射 + map

先将df2转换为date到key1的映射字典,再用map替换df1的key1,未匹配到的行保留原值:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'date': ['01/01/2020  0:00:00', '01/01/2020  0:30:00', '01/01/2020  1:00:00', '01/01/2020  1:30:00'],
    'key1': [1, 2, 3, 4],
    'key2': [11, 12, 13, 14]
})

df2 = pd.DataFrame({
    'date': ['01/01/2020  0:00:00', '01/01/2020  1:00:00'],
    'key1': [888, 888]
})

# 构建映射字典
key_mapping = df2.set_index('date')['key1'].to_dict()

# 替换并保留原值
df1['key1'] = df1['date'].map(key_mapping).fillna(df1['key1']).astype(int)

print(df1)

方法2:左连接合并 + 填充

通过左连接合并两个DataFrame,用df2的key1填充匹配行,最后清理临时列:

# 左连接两个DataFrame
merged = df1.merge(df2, on='date', how='left', suffixes=('', '_new'))

# 替换key1,未匹配行保留原值
merged['key1'] = merged['key1_new'].fillna(merged['key1']).astype(int)

# 删除临时列
result = merged.drop('key1_new', axis=1)

print(result)

方法3:update直接修改

update方法会直接在df1上更新匹配到的行,操作更简洁:

# 将df2设置date为索引,方便匹配
df2.set_index('date', inplace=True)

# 用df2的key1更新df1的对应行
df1.set_index('date', inplace=True)
df1.update(df2)
df1.reset_index(inplace=True)

# 转换为整数类型(update后可能变为float)
df1['key1'] = df1['key1'].astype(int)

print(df1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:20:48