如何用循环优雅处理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
相关产品推荐
相关产品推荐

