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

基于Pandas逐行比对两个DataFrame并执行距离计算的需求

Pandas双DataFrame按双列匹配计算坐标距离并生成新列

需求概述

已有两个Pandas DataFrame(DF1、DF2),需完成以下操作:

  • 仅匹配PARTICIPANT和TRIAL值均相同的DF1与DF2行
  • 用math.dist计算DF1中PRE_FIX_X/Y与DF2中POST_FIX_X/Y的欧氏距离
  • 若距离≤150,将对应DF2行的CURRENT_FIX_INDEX记录到DF1新增的REFIX列(多个值用逗号分隔)
  • 最终将处理后的DF1保存为CSV文件

示例数据

DF1(原始数据)

IP_INDEXIP_LABELPARTICIPANTTRIALCURRENT_FIX_INDEXPRE_FIX_XPRE_FIX_Y
1前3秒a11550150
1前3秒a12600300
1前3秒a21250600
1前3秒b11400400
1前3秒b21600400

DF2(匹配数据源)

IP_INDEXIP_LABELPARTICIPANTTRIALCURRENT_FIX_INDEXPOST_FIX_XPOST_FIX_Y
2后3秒a11500200
2后3秒a12650350
2后3秒a21300650
2后3秒b11250700
2后3秒b12450150
2后3秒b21550350
2后3秒b22350550

实现逻辑

  • 给DF1新增空列REFIX
  • 按PARTICIPANT和TRIAL对DF2分组,仅处理与DF1匹配的分组
  • 对每个匹配分组内的DF1行,计算其与DF2所有行的坐标距离
  • 筛选距离≤150的DF2行,收集对应的CURRENT_FIX_INDEX并以逗号连接,赋值给DF1的REFIX列
  • 导出处理后的DF1为CSV文件

代码实现

import pandas as pd
import math

# 初始化REFIX列为空字符串
df1['REFIX'] = ''

# 按PARTICIPANT和TRIAL分组处理DF2,减少无效匹配
for (participant, trial), df2_group in df2.groupby(['PARTICIPANT', 'TRIAL']):
    # 定位DF1中当前分组的行
    df1_mask = (df1['PARTICIPANT'] == participant) & (df1['TRIAL'] == trial)
    df1_matched_rows = df1[df1_mask]
    
    if df1_matched_rows.empty:
        continue
    
    # 遍历DF1当前分组的每一行
    for idx, row1 in df1_matched_rows.iterrows():
        # 计算当前DF1行与DF2分组内所有行的欧氏距离
        distances = df2_group.apply(
            lambda row2: math.dist(
                [row1['PRE_FIX_X'], row1['PRE_FIX_Y']],
                [row2['POST_FIX_X'], row2['POST_FIX_Y']]
            ),
            axis=1
        )
        
        # 筛选符合距离条件的CURRENT_FIX_INDEX,转为字符串后用逗号连接
        valid_indices = df2_group[distances <= 150]['CURRENT_FIX_INDEX'].astype(str)
        df1.loc[idx, 'REFIX'] = ','.join(valid_indices)

# 保存处理后的DF1到CSV
df1.to_csv('processed_df1.csv', index=False)

代码说明

  • 采用groupby分组处理,避免全量笛卡尔积匹配,提升10000+行数据的处理效率
  • 用math.dist直接计算二维坐标的欧氏距离,逻辑清晰
  • 对符合条件的索引进行字符串转换后拼接,保证REFIX列格式符合要求

处理后DF1示例

IP_INDEXIP_LABELPARTICIPANTTRIALCURRENT_FIX_INDEXPRE_FIX_XPRE_FIX_YREFIX
1前3秒a115501501
1前3秒a126003001,2
1前3秒a212506001
1前3秒b11400400
1前3秒b216004001

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:35:05