在Pandas中高效比对源/目标行对并生成匹配结果

在Pandas中高效比对源/目标行对并生成匹配结果

本教程详细介绍了如何使用pandas在dataframe中高效比对成对的“源”和“目标”行。文章通过创建辅助标识符来识别行对,并逐对比较指定列的值。根据比对结果,为每对中的“源”行添加“通过”或“失败”标记,并优化输出格式。教程还涵盖了代码实现、潜在问题及解决方案,旨在提供一个清晰、专业的dataframe数据匹配与结果标记方法。

引言:DataFrame行对数据比对需求

在数据处理和质量控制的场景中,我们经常需要比对两组相关数据以验证其一致性。例如,将源系统的数据(Source)与经过处理或传输后的目标系统数据(Target)进行比对,并标记出匹配或不匹配的情况。这种需求通常涉及在DataFrame中识别成对的行,并根据特定列的值进行比较,最终生成一个指示比对结果的新列。本教程将专注于解决这类问题,展示如何使用Pandas库实现高效且灵活的行对数据比对,并生成清晰的“Pass”/“Fail”结果标记。

数据结构与问题定义

假设我们有一个DataFrame,其中包含成对出现的“Source”和“Target”行。每对行通过其在Obs列中的顺序关系(例如,Obs=1是Source,Obs=2是其对应的Target)来标识。比对的目的是检查每对中Source行和Target行在Col1、Col2、Col3这几列上的值是否完全一致。

以下是示例输入数据的结构:

Obs Dataset Col1 Col2 Col3

1SourceA10X2TargetA10X3SourceB20Y4TargetB20Y5SourceC30Z6TargetD30Z

我们期望的输出是在Source行中添加一个Result列,指示该行对的比对结果(“Pass”或“Fail”),而Target行的Result列则保持为空,同时调整列的顺序以符合可视化需求:

Obs Dataset Result Col1 Col2 Col3

1SourcePassA10X2TargetA10X3SourcePassB20Y4TargetB20Y5SourceFailC30Z6TargetD30Z

核心实现:基于行对的精确比对

解决这个问题的关键在于准确识别每一对“Source”和“Target”行,然后对它们进行逐列比较。

步骤一:准备数据与识别行对

首先,我们需要创建一个示例DataFrame,并初始化Result列。为了将“Source”和“Target”行逻辑上关联起来形成一个“对”,我们可以利用Obs列的顺序性来生成一个pair_id。由于Obs是连续的且Source/Target成对出现,我们可以通过简单的数学运算来创建这个标识符。

import pandas as pd# 示例DataFramedata = {    'Obs': [1, 2, 3, 4, 5, 6],    'Dataset': ['Source', 'Target', 'Source', 'Target', 'Source', 'Target'],    'Col1': ['A', 'A', 'B', 'B', 'C', 'D'],    'Col2': [10, 10, 20, 20, 30, 30],    'Col3': ['X', 'X', 'Y', 'Y', 'Z', 'Z']}df = pd.DataFrame(data)# 复制DataFrame进行操作,避免修改原始数据df_processed = df.copy()# 初始化'Result'列df_processed['Result'] = ''# 创建一个辅助列 'pair_id' 来标识每一对行# (Obs - 1) // 2 会为 (1,2) 得到 0, 为 (3,4) 得到 1, 以此类推df_processed['pair_id'] = (df_processed['Obs'] - 1) // 2print("添加pair_id后的DataFrame:")print(df_processed)

输出示例:

添加pair_id后的DataFrame:   Obs Dataset Col1  Col2 Col3 Result  pair_id0    1  Source    A    10    X             01    2  Target    A    10    X             02    3  Source    B    20    Y             13    4  Target    B    20    Y             14    5  Source    C    30    Z             25    6  Target    D    30    Z             2

步骤二:逐对比较与结果判定

有了pair_id,我们就可以使用groupby()方法按pair_id分组,然后对每个组应用一个自定义函数来执行比对逻辑。

绘蛙 绘蛙

电商场景的AI创作平台,无需高薪聘请商拍和文案团队,使用绘蛙即可低成本、批量创作优质的商拍图、种草文案

绘蛙 175 查看详情 绘蛙

# 定义需要比较的列compare_columns = ['Col1', 'Col2', 'Col3']# 定义一个函数来比较每一对Source和Target行def compare_source_target_pair(group):    source_row = group[group['Dataset'] == 'Source']    target_row = group[group['Dataset'] == 'Target']    # 确保Source和Target行都存在于组中    if source_row.empty or target_row.empty:        # 如果某对不完整,可以根据业务需求返回特定状态或抛出错误        # 在本例中,我们假设每对都是完整的        return 'Incomplete Pair'    # 提取Source和Target行的值(使用iloc[0]获取Series)    source_values = source_row.iloc[0][compare_columns]    target_values = target_row.iloc[0][compare_columns]    # 比较所有指定列的值是否完全一致    # 使用 .equals() 方法可以进行Series的精确比较,包括数据类型和顺序    match = source_values.equals(target_values)    return 'Pass' if match else 'Fail'# 将比较函数应用到每个行对# .apply() 方法会将每个组作为一个DataFrame传递给函数pair_results = df_processed.groupby('pair_id').apply(compare_source_target_pair)print("n每对行的比对结果:")print(pair_results)

输出示例:

每对行的比对结果:pair_id0    Pass1    Pass2    Faildtype: object

步骤三:整合结果与格式化输出

最后一步是将比对结果映射回原始DataFrame的Source行,并对DataFrame进行清理和格式化,使其符合期望的输出结构。

# 将比对结果映射回原始DataFrame的'Result'列# 遍历pair_results,将结果赋给对应pair_id的Source行for pair_id, result_status in pair_results.items():    # 找到当前pair_id中'Source'行的索引    source_index = df_processed[(df_processed['pair_id'] == pair_id) & (df_processed['Dataset'] == 'Source')].index    if not source_index.empty:        df_processed.loc[source_index[0], 'Result'] = result_status# 删除临时创建的'pair_id'列df_processed = df_processed.drop(columns=['pair_id'])# 调整列的顺序以符合期望的输出格式final_columns_order = ['Obs', 'Dataset', 'Result', 'Col1', 'Col2', 'Col3']df_final = df_processed[final_columns_order]print("n最终比对结果DataFrame:")print(df_final)

最终输出:

最终比对结果DataFrame:   Obs Dataset Result Col1  Col2 Col30    1  Source   Pass    A    10    X1    2  Target          A    10    X2    3  Source   Pass    B    20    Y3    4  Target          B    20    Y4    5  Source   Fail    C    30    Z5    6  Target          D    30    Z

替代方案与适用场景:基于pd.merge的匹配

虽然上述基于groupby().apply()的方法非常适合处理严格的“行对”比对,但在某些情况下,我们可能需要更通用的匹配逻辑,例如查找在两个独立数据集中都存在的记录。Pandas的pd.merge函数在此类场景中非常强大。

如果你的需求是:

将“Source”和“Target”视为两个独立的数据集。找出在两个数据集中,Col1, Col2, Col3这些列值都完全相同的记录。不关心原始的Obs顺序或严格的“成对”关系,而是查找“共同存在的记录”。

那么,pd.merge结合how=’inner’是一个更简洁的选择。它会返回所有在两个DataFrame中,基于指定键(即`Col1

以上就是在Pandas中高效比对源/目标行对并生成匹配结果的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/917488.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月29日 06:03:59
下一篇 2025年11月29日 06:07:49

相关推荐

  • 国内可用的比特币交易所App有哪些?2025最新排名及下载

    在数字资产的世界里,交易平台的选择是参与者必须面对的一个重要环节。一个稳定、安全且功能丰富的平台,能够为用户的交易活动提供坚实的基础。对于国内的用户群体而言,寻找到一个既符合使用习惯又能提供流畅体验的比特币交易所app显得尤为关键。这些平台不仅是买卖数字资产的场所,更是获取市场信息、管理个人数字资产…

    好文分享 2025年12月8日
    000
  • 做空狗狗币爆仓了怎么办?如何减少损失?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 做空狗狗币遭遇爆仓是一个令人沮丧的经历。在这种情况下,关注的核心是如何处理当前的局面,并尽量控制可能产生的进一步影响。爆仓意味着您的保证金不足以维持仓位,交易平台已…

    2025年12月8日
    000
  • 全球十大虚拟货币交易所排名 2025最新版下载

    在数字资产的世界里,交易平台的选择对于参与者至关重要。一个优秀的交易平台不仅关乎资产的安全,也直接影响着交易的效率和体验。当前市场上的交易平台数量繁多,它们在流动性、支持的资产种类、安全性、用户界面设计以及客户服务等多个维度上展现出各自的特点和优势。衡量一个交易平台的综合实力,通常会参考其每日交易量…

    2025年12月8日
    000
  • 十大靠谱数字货币交易平台2025推荐 全球前十虚拟货币交易所

    在全球数字资产交易的广阔领域,选择一个具备可靠运营记录和强大安全保障的交易平台是用户进行交易活动的基础。随着市场发展,一些平台凭借其稳定的服务、丰富的交易品种以及合规运营,在全球范围内赢得了用户的信任和认可。以下是根据市场表现、用户反馈、安全措施和交易深度等多方面因素,在全球范围内具有较高知名度和可…

    2025年12月8日 好文分享
    000
  • 数字货币交易app 全球最受欢迎的虚拟币平台排名

    数字货币交易平台在全球范围内的普及程度不断攀升,为用户提供数字资产的买卖服务。这些平台通常拥有庞大的用户基础和显著的交易量,支持多种加密货币的交易对以及不同的交易方式,例如现货交易、合约交易等。它们在技术基础设施、安全措施、流动性以及用户体验等方面存在差异。了解这些平台的特性,有助于用户做出符合自身…

    2025年12月8日 好文分享
    000
  • 最新虚拟货币交易入口 十大虚拟货币交易入口最新地址

    最新虚拟货币交易入口地址 1. Binance Binance(币安)继续以其庞大的生态系统和无可匹敌的交易深度,稳坐全球最大虚拟货币交易平台的宝座。其现货和衍生品市场的交易量长期占据行业领先地位,为用户提供了极佳的流动性,这意味着交易者可以以更小的滑点完成大额订单。Binance的成功很大程度上归…

    2025年12月8日 好文分享
    000
  • 必安和欧意okx的对比 2025最全分析完整版

    探讨全球数字资产交易领域的两个重要平台,必安与欧意okx,并分析它们在功能、服务及用户体验上的不同之处。 必安 作为全球知名的数字资产交易平台,必安拥有庞大的用户基础和极高的交易量。它提供涵盖现货、合约、期权等多种交易产品,并不断扩展其生态系统,包括Launchpad、挖矿池、NFT市场等。平台的服…

    好文分享 2025年12月8日
    000
  • 必安binance和火币htx怎么选 全面分析2025

    在快速演变的加密货币市场中,选择一个合适的数字资产交易平台是投资者与交易者面临的关键决策。两大全球性交易所——必安(binance)与火币(htx,前身为火币global)长期以来占据着重要地位,它们各自拥有庞大的用户基础和独特的平台特性。进入2025年,市场格局、监管环境以及技术发展都在不断变化,…

    2025年12月8日
    000
  • 2025虚拟币交易平台app最新排行榜

    2025最新虚拟货币交易平台 1. Binance binance(币安)继续以其庞大的生态系统和无可匹敌的交易深度,稳坐全球最大虚拟货币交易平台的宝座。其现货和衍生品市场的交易量长期占据行业领先地位,为用户提供了极佳的流动性,这意味着交易者可以以更小的滑点完成大额订单。binance的成功很大程度…

    2025年12月8日 好文分享
    000
  • 全球顶级数字货币交易平台2025年TOP10

    数字货币交易平台在全球范围内提供了连接买卖双方、促进资产流通的关键基础设施。这些平台各具特色,服务于不同类型的用户群体,从新手投资者到专业交易员乃至机构客户。它们的运营规模、提供的交易产品、用户体验、安全措施以及合规状况构成了用户选择时考量的重要因素。 数字资产交易市场的活跃度不断变化,各平台在技术…

    2025年12月8日 好文分享
    000
  • 虚拟货币交易所最新排行2025全球十大平台

    虚拟货币交易平台在全球数字资产市场中扮演着核心角色。它们提供了加密货币与法定货币或不同加密货币之间进行交换的场所。一个优秀的交易平台通常具备高流动性、广泛的资产覆盖范围以及可靠的安全措施。交易平台的功能远不止简单的买卖,它们往往还提供衍生品交易、理财服务、质押等多种功能,以满足不同用户的需求。 虚拟…

    2025年12月8日 好文分享
    000
  • 如何在币安、欧易、火币中做出最佳选择?

    在数字资产交易领域,币安、欧易和火币都是具有影响力的平台。对于投资者而言,了解它们各自的特点并进行比较,对于做出符合自身需求的决策至关重要。 币安 币安是全球知名的加密货币交易所,以其庞大的交易量和广泛的数字资产种类著称。平台提供现货、合约、期权等多种交易产品,并不断拓展其生态系统服务。 欧易 欧易…

    2025年12月8日
    000
  • 加密更新:FXWirePro关于新兴趋势和关键发展的见解

    在加密世界的高速发展中抢占先机! fxwirepro为您带来最新动态,涵盖新项目上线到前沿区块链技术,所有信息尽在此处。 嘿,加密爱好者们!你是否曾在数字资产和区块链术语的洪流中感到迷失?别担心。FXWirePro为你带来最新的加密资讯,让你轻松掌握热点趋势,不再错过关键动态。现在就一起来看看有哪些…

    2025年12月8日
    000
  • 全球三大交易所如何选择 全方位硬核分析

    选择合适的加密货币交易所是参与数字资产市场的关键第一步。不同的平台在提供的服务、安全性以及用户体验上存在差异。了解全球主要交易所的特点,对于做出明智的决定至关重要。 主要交易所介绍 Binance 作为全球用户量和交易量领先的平台,Binance提供了极为丰富的数字资产交易对和多元化服务。它不仅支持…

    2025年12月8日
    000
  • 币安、欧易、火币(HTX)交易所的10大核心区别全解析

    币安 币安官网直达: 币安交易所于2017年成立,由赵长鹏创立,迅速成长为全球交易量领先的加密货币交易所。它提供广泛的数字资产交易服务,包括现货交易、期货、期权、杠杆交易以及其他金融产品。币安以其高流动性、丰富的交易对和相对较低的交易费用而闻名。其技术架构旨在处理高并发交易,确保系统稳定运行。平台的…

    2025年12月8日
    000
  • 全球三大交易所PK:币安、欧易、火币谁是真正的王者?

    在全球数字资产交易领域,几个平台因其巨大的交易量、广泛的用户基础和多样的服务而脱颖而出。它们不仅是买卖加密货币的场所,更是连接用户与区块链世界的桥梁。在众多参与者中,有几个名字长期占据着核心位置,它们之间的竞争与发展,深刻影响着整个行业的格局。理解这些平台的特点和区别,对于寻求进入或深入数字资产市场…

    2025年12月8日
    000
  • 2025年加密货币:新兴项目要观看

    探索2025年的加密货币世界,聚焦qubetics、troller cat以及其他具备增长潜力的新锐项目。 2025年加密货币趋势:值得关注的新兴项目 随着我们迈入2025年,加密市场再次活跃起来。比特币持续刷新历史高点,投资者也在寻找下一个可能爆发的项目。本文将介绍一些有望在新的一年中脱颖而出的新…

    2025年12月8日
    000
  • 核心科学:从加密矿工到AI Powerhouse?交易谈话升温!

    core scientific的股价在与ai云服务商coreweave重启收购谈判的消息传出后大幅上涨,突显出这家加密货币矿工正成功向人工智能基础设施领域转型。 核心科学:从加密挖矿到AI巨头?并购传闻引爆市场! =============================== Core Scient…

    2025年12月8日
    000
  • 币安、欧易、HTX哪个更适合你?三大交易所优劣势深度剖析

    币安 (Binance) 币安作为当前全球用户数量与交易量最大的加密货币交易平台之一,提供广泛的加密资产交易服务。其生态系统庞大,涵盖现货、合约、期权交易,以及质押、借贷、NFT市场和IEO平台Launchpad等。币安链(BNB Chain)的发展也为其生态系统注入了活力,BNB作为平台币在全球范…

    2025年12月8日
    000
  • 十大货币交易入口地址大全

    虚拟货币交易入口地址 1. Binance Binance(币安)继续以其庞大的生态系统和无可匹敌的交易深度,稳坐全球最大虚拟货币交易平台的宝座。其现货和衍生品市场的交易量长期占据行业领先地位,为用户提供了极佳的流动性,这意味着交易者可以以更小的滑点完成大额订单。Binance的成功很大程度上归功于…

    2025年12月8日 好文分享
    000

发表回复

登录后才能评论
关注微信