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

多Pandas DataFrame按共有pID关联并保留所有匹配行的实现方案

实现方案

核心思路

先计算所有随访批次表中共同存在的pID集合,再拼接全量数据后筛选对应记录,避免多表场景下原两表逻辑的误判问题(原两表逻辑用duplicated判断重复,多表场景下会把仅在部分表中重复出现的pID误判为符合要求的记录)。

具体实现步骤

  • 第一步:把所有待处理的DataFrame存入列表,方便批量操作
# 有多少个随访表就添加多少个到列表中
df_list = [df_1, df_2, df_3, df_4]
  • 第二步:计算所有表共有的pID集合
# 初始化交集为第一个表的pID集合
common_pids = set(df_list[0]['pID'])
# 逐个和剩余表的pID取交集
for df in df_list[1:]:
    common_pids.intersection_update(set(df['pID']))

可选简洁写法:适合熟悉高阶函数的场景

from functools import reduce
common_pids = reduce(lambda x, y: x.intersection(set(y['pID'])), df_list, set(df_list[0]['pID']))
  • 第三步:拼接全量数据、筛选目标记录、排序输出
# 拼接所有表,同时丢弃无用的ID列
all_data = pd.concat(df_list, ignore_index=True).drop(columns=['ID'])
# 筛选仅在共同pID集合中的记录,按pID排序后重置索引
out = all_data[all_data['pID'].isin(common_pids)].sort_values('pID').reset_index(drop=True)

补充说明

  • 该方案不受单表内pID重复、表数量多少的影响,准确性更高
  • 单表内同一个pID存在多条记录时,逻辑会正常保留所有符合要求的行
  • 如果需要同时按随访批次排序,可将排序逻辑修改为sort_values(['pID', 'Code'])

内容的提问来源于stack exchange,提问作者Trovão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 21:06:03