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

如何用循环优雅处理Pandas DataFrame列的isin匹配并保存结果

问题描述

我有两个各包含3列的DataFrame,目前手动执行了以下匹配操作:

a = df[x].isin(df2[x])
b = df[x].isin(df2[y])
c = df[y].isin(df2[x])
d = df[y].isin(df2[x])  # 注:原代码与c重复,推测应为df[y].isin(df2[y])

其中x、y为两个DataFrame的列名。希望通过循环优雅实现这些操作,并将每个结果按如下格式输出/保存:

a; True = ddd
   False = eee
b; True = rrr
   False = fff
c; and so 
d; and so
解决方案

1. 定义匹配规则集合

先把所有需要执行的匹配逻辑整理成结构化的列表,每个元素包含匹配项名称、df的列名、df2的列名:

# 替换x、y为实际列名,比如'col_a'、'col_b'
match_rules = [
    ('a', 'x', 'x'),
    ('b', 'x', 'y'),
    ('c', 'y', 'x'),
    ('d', 'y', 'y')  # 修正原代码中d与c重复的问题
]

2. 循环执行匹配并统计结果

遍历规则列表,统一执行匹配、统计True/False数量,再按要求格式输出:

# 可选:用字典存储结果,方便后续复用
result_store = {}

for name, df_col, df2_col in match_rules:
    # 执行匹配操作
    match_res = df[df_col].isin(df2[df2_col])
    # 统计True和False的数量
    true_num = match_res.sum()
    false_num = len(match_res) - true_num
    # 存入字典
    result_store[name] = {'True': true_num, 'False': false_num}
    # 按要求格式打印
    print(f"{name}; True = {true_num}")
    print(f"   False = {false_num}")

3. 保存到文件(可选)

如果需要将结果写入文件,替换打印代码为文件写入逻辑:

with open('match_results.txt', 'w', encoding='utf-8') as f:
    for name, stats in result_store.items():
        f.write(f"{name}; True = {stats['True']}\n")
        f.write(f"   False = {stats['False']}\n")

补充说明

  • 原代码中d的逻辑与c重复,这里默认修正为df[y].isin(df2[y]),如果实际需求不同,只需修改match_rules中的对应元组即可。
  • 这种循环方式避免了重复代码,后续新增匹配规则只需在match_rules中添加元组,扩展性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:20:20