如何检查两个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
相关产品推荐
相关产品推荐

