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

pandas如何基于ID关联表从另一DataFrame匹配映射对应数据

实现方法

直接通过pandas内连接即可完成需求,无需额外循环或自定义映射逻辑:

  • 内连接会自动过滤掉ID映射表中不存在的id_2=30记录
  • 映射表中同一个id_2对应多个id_1时,连接操作会自动将该id_2下的所有业务记录分别匹配到每个id_1上
  • 提前对业务表做去重,避免完全重复的业务记录生成多余的关联结果

完整代码

import pandas as pd

# --------------- 以下是示例数据构造,你已有数据可直接跳过 ---------------
df_related_id = pd.DataFrame({
    'id_1': [1, 2, 3, 4],
    'id_2': [10, 10, 10, 5]
})

df_2 = pd.DataFrame({
    'id_2': [10, 10, 10, 5, 5, 30],
    'date': ['2017-12-31', '2017-12-31', '2017-12-31', '2017-11-30', '2017-11-30', '2017-12-31'],
    'hour': ['6:00', '6:15', '6:00', '6:00', '6:00', '6:00'],
    'val': [-1, 12, -1, 11, 11, 14]
})
# --------------------------------------------------------------------

# 核心处理流程
# 1. 去除业务表中完全重复的记录
df_2_unique = df_2.drop_duplicates(subset=['id_2', 'date', 'hour', 'val'])
# 2. 以id_2为键做内连接关联
merge_result = pd.merge(df_related_id, df_2_unique, on='id_2', how='inner')
# 3. 筛选目标字段、排序后重置索引
final_result = merge_result[['id_1', 'date', 'hour', 'val']].sort_values('id_1').reset_index(drop=True)

运行结果

执行print(final_result)即可得到和预期完全一致的输出:

id_1        date  hour  val
0     1  2017-12-31  6:00   -1
1     1  2017-12-31  6:15   12
2     2  2017-12-31  6:00   -1
3     2  2017-12-31  6:15   12
4     3  2017-12-31  6:00   -1
5     3  2017-12-31  6:15   12
6     4  2017-11-30  6:00   11

注:原示例中2017-11-31为非法日期(11月共30天),代码中修正为2017-11-30,实际使用时替换为你的真实日期值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:06:33