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

基于关联ID与日期从另一DataFrame匹配取值的技术问询

Pandas 基于关联ID与日期筛选DataFrame记录

需求说明

现有三个Pandas DataFrame:df_k、df_w和关联表df_related,需要从df_w中筛选出满足以下条件的记录:

  • 记录的id_w经df_related映射后,对应df_k中的id_k
  • 记录的date与df_k中对应id_k的日期完全匹配

示例数据

import pandas as pd

# df_k数据
df_k = pd.DataFrame({
    'id_k': [3, 4, 4],
    'date': ['2021-05-01', '2021-05-01', '2021-05-02']
})

# 关联表df_related
df_related = pd.DataFrame({
    'id_w': [1, 2, 3],
    'id_k': [3, 4, 5]
})

# df_w数据
df_w = pd.DataFrame({
    'id_w': [1, 1, 2, 2, 3],
    'date': ['2021-05-01', '2021-05-02', '2021-05-01', '2021-05-02', '2021-05-01'],
    'val': [1, -1, 2, -2, 6]
})

实现方案

方法1:合并关联表生成匹配对,再筛选

先通过merge将df_k与关联表结合,得到所有需要匹配的(id_w, date)组合,再用这个组合筛选df_w:

# 生成需要匹配的(id_w, date)对
matched_pairs = df_k.merge(df_related, on='id_k', how='inner')[['id_w', 'date']]

# 筛选df_w中符合条件的记录
result = df_w.merge(matched_pairs, on=['id_w', 'date'], how='inner')

方法2:用元组匹配筛选

将匹配对转为元组列表,通过isin实现多列匹配筛选:

# 生成匹配元组列表
match_tuples = list(matched_pairs.itertuples(index=False, name=None))

# 筛选符合条件的记录
result = df_w[df_w[['id_w', 'date']].apply(tuple, axis=1).isin(match_tuples)]

输出结果

两种方法最终都会得到符合要求的结果:

id_w        date  val
0     1  2021-05-01    1
1     2  2021-05-01    2
2     2  2021-05-02   -2

逻辑说明

  1. 第一步通过关联表df_related将df_k中的id_k映射为对应的id_w,同时保留df_k中的日期,得到所有合法的id_w与日期组合。
  2. 第二步从df_w中筛选出包含这些合法组合的记录,确保同时满足ID映射和日期匹配的条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:24:21