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

如何检查两个Pandas DataFrame的id列值是否相同并拼接匹配行

问题描述

我有一个名为df的DataFrame,包含frame、id、x、y四个数值列。通过以下循环生成原DataFrame的两个子集df1和df2:

for i in range(0, max(df['frame']), 30):
    df1 = df[df['frame'].between(i, i+30)]
    df2 = df[df['frame'].between(i-30, i)]

现在需要实现:检查df1和df2的id列是否存在相同值,若存在,将df2中对应相同id值的行拼接到df1中。例如:若df1的id值为1、6、4、8,df2的id值为12、7、8、10,则需将df2中id=8的行拼接到df1。


解决方案

直接在循环内完成交集筛选与拼接即可,代码如下:

import pandas as pd

# 假设df已提前定义
for i in range(0, max(df['frame']), 30):
    df1 = df[df['frame'].between(i, i+30)]
    df2 = df[df['frame'].between(i-30, i)]
    
    # 跳过df2为空的边界情况(比如i=0时)
    if df2.empty:
        continue
    
    # 提取两个子集共有的id
    common_ids = set(df1['id'].unique()) & set(df2['id'].unique())
    if not common_ids:
        continue  # 无共同id时直接跳过
    
    # 筛选df2中对应id的行并拼接到df1
    df2_target = df2[df2['id'].isin(common_ids)]
    df1 = pd.concat([df1, df2_target], ignore_index=True)
    
    # 此处可添加对拼接后df1的后续处理逻辑

代码说明

  • set(df1['id'].unique()) & set(df2['id'].unique()):用集合交集快速获取两个子集共有的id值,效率比纯Series操作更高;
  • df2[df2['id'].isin(common_ids)]:精准筛选df2中符合条件的行;
  • pd.concat(..., ignore_index=True):拼接后重置索引,避免出现重复索引问题;
  • 新增的空值判断可以处理循环初始阶段df2无数据的情况,避免无效运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:20:27