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

Python编写比对两个DataFrame并生成新DataFrame的函数方法

Python DataFrame 匹配提取实现方案

实现思路

  • 分别为两个DataFrame生成MT_NET列的绝对值作为匹配辅助键
  • 以NUMBER交易代码、MT_NET绝对值作为共同匹配条件做内连接,筛选出同时满足两个匹配规则的行
  • 拆分连接结果,提取两个DataFrame的匹配原行合并为最终输出

实现代码

import pandas as pd

def match_mt_data(df_EX: pd.DataFrame, df_VE: pd.DataFrame) -> pd.DataFrame:
    # 新增临时列存储MT_NET绝对值,不影响原数据
    df_EX = df_EX.copy()
    df_VE = df_VE.copy()
    df_EX['abs_mt'] = df_EX['MT_NET'].abs()
    df_VE['abs_mt'] = df_VE['MT_NET'].abs()
    
    # 内连接匹配符合条件的行
    match_pairs = pd.merge(
        df_EX,
        df_VE,
        on=['NUMBER', 'abs_mt'],
        suffixes=('_ex', '_ve')
    )
    
    # 提取匹配到的df_EX原行数据
    ex_cols = [col for col in df_EX.columns if col != 'abs_mt']
    ex_rows = match_pairs[[f'{c}_ex' for c in ex_cols]]
    ex_rows.columns = ex_cols
    
    # 提取匹配到的df_VE原行数据
    ve_cols = [col for col in df_VE.columns if col != 'abs_mt']
    ve_rows = match_pairs[[f'{c}_ve' for c in ve_cols]]
    ve_rows.columns = ve_cols
    
    # 合并结果返回
    return pd.concat([ex_rows, ve_rows], ignore_index=True)

调用方式

# 直接传入待比对的两个DataFrame即可得到结果
output_df = match_mt_data(df_EX, df_VE)

注意事项

  • 输出的新DataFrame列结构和原两个DataFrame完全一致
  • 不会修改传入的原始df_EX和df_VE数据
  • 支持一对多、多对多的匹配场景,所有符合条件的行都会被提取

内容的提问来源于stack exchange,提问作者Hedi Ben Khalifa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:02