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

如何在两个Pandas DataFrame间根据ID匹配复制日期数据

解决Pandas DataFrame按ID匹配复制日期的问题

这里提供两种实用方法,帮你快速实现从main_df向second_df按ID匹配复制日期的需求:

方法一:使用merge(推荐,适配重复ID场景)

通过左连接(left join)关联两个DataFrame,自动匹配对应ID的日期,同时保留second_df的所有行:

import pandas as pd

# 初始化数据
main_df = pd.DataFrame({
    "id": [123, 456, 789, 357, 159], 
    "date": [None, "2022-10-10", "2022-09-15", None, "2022-09-15"], 
    "stuff": [3, 6, 2, 9, 3]
})

second_df = pd.DataFrame({
    "id": [321, 456, 789, 789, 351], 
    "stuff": [3, 6, 2, 4]
})

# 左连接:保留second_df所有行,匹配main_df的date列
result_df = pd.merge(second_df, main_df[["id", "date"]], on="id", how="left")
# 按需去重(匹配预期结果,去除重复的id+stuff组合)
result_df = result_df.drop_duplicates(subset=["id", "stuff"], keep="first")
print(result_df)

执行后会得到你预期的结果:未匹配到ID的行date列自动填充NaN,匹配到的行对应日期会被复制过来。

方法二:使用map(简洁高效,适合ID唯一场景)

先从main_df构建ID到日期的映射字典,再通过map方法快速给second_df添加日期列:

import pandas as pd

# 初始化数据
main_df = pd.DataFrame({
    "id": [123, 456, 789, 357, 159], 
    "date": [None, "2022-10-10", "2022-09-15", None, "2022-09-15"], 
    "stuff": [3, 6, 2, 9, 3]
})

second_df = pd.DataFrame({
    "id": [321, 456, 789, 789, 351], 
    "stuff": [3, 6, 2, 4]
})

# 构建id到date的映射字典(若main_df有重复ID,会保留最后一个匹配的日期)
id_date_map = main_df.set_index("id")["date"].to_dict()

# 给second_df添加date列
second_df["date"] = second_df["id"].map(id_date_map)
# 按需去重
second_df = second_df.drop_duplicates(subset=["id", "stuff"], keep="first")
print(second_df)

方法对比

  • merge:适合处理存在重复ID、需要更复杂关联逻辑的场景,灵活性更高;
  • map:代码更简洁,执行效率更高,适合main_df中ID唯一的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:15:38