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

如何根据指定dataframe的条件过滤目标dataframe中的匹配行

Pandas多列组合过滤实现方案

实现思路

核心是动态读取df2的匹配规则,通过多列组合值匹配的方式过滤df1,无需硬编码任何过滤值,适配df2的内容变更。

  • 仅需提前配置df1中与df2列顺序一一对应的匹配列名,核心逻辑永久生效
  • 提供两种实现方案,分别适配不同数据量场景

完整可运行代码

import pandas as pd

# 构造测试数据(实际使用时替换为自己的数据读取逻辑即可)
df1 = pd.DataFrame({
    'from id': [1,4,5,2],
    'from group': ['A','B','F','B'],
    'to id': [3,4,5,3],
    'to group': ['B','X','J','A']
})

df2 = pd.DataFrame({
    'From': ['A','F'],
    'To': ['B','J']
})

# -------------------------- 核心配置(仅此处需要根据匹配规则调整) --------------------------
# 列表内的列名顺序需要和df2的列顺序一一对应,匹配列数变化时仅改此处即可
df1_match_cols = ['from group', 'to group']
# -----------------------------------------------------------------------------------------

# 方案1:集合匹配法,适合中小数据量,代码简洁
filter_keys = set(df2.itertuples(index=False, name=None))
df_result = df1[~df1[df1_match_cols].apply(tuple, axis=1).isin(filter_keys)]

# 方案2:左连接反匹配法,适合大数据量,矢量化操作性能更高
# df2_renamed = df2.set_axis(df1_match_cols, axis=1)
# df_merge = df1.merge(df2_renamed, on=df1_match_cols, how='left', indicator=True)
# df_result = df_merge[df_merge['_merged'] == 'left_only'].drop('_merged', axis=1)

# 输出结果
print(df_result)

灵活性说明

  1. df2的行内容增删改时,不需要修改任何逻辑,代码会自动读取最新的过滤规则
  2. 如果后续匹配维度变化(比如需要新增匹配列、调整匹配顺序),仅需要修改df1_match_cols的配置,核心过滤逻辑完全不用调整

运行结果

from idfrom groupto idto group
14B4X
32B3A

和需求预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:30:00