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

基于匹配列合并不同长度DataFrame并筛选匹配行的问题

解决方案

问题根源

你之前的代码逻辑存在两个核心错误:

  1. 错误地将匹配标记列result添加到了DF2(sv_df)而非DF1(source_df),导致后续操作对象完全错位;
  2. 仅从DF2中提取了匹配行,但未将其与DF1的匹配行进行合并,因此无法实现“将DF2内容整合到DF1”的需求。

正确实现方法

假设你的原始数据中:DF1对应代码里的source_df(键列iTOW),DF2对应sv_df(键列_iTOW),推荐两种实现方式:

方法一:直接用Merge(最简洁高效)

利用Pandas的merge方法直接完成匹配+合并+过滤,一步到位:

# 内连接仅保留两边都匹配的行,自动合并DF2的所有列到DF1
result_df = source_df.merge(sv_df, left_on='iTOW', right_on='_iTOW', how='inner')
  • left_on指定DF1的匹配键,right_on指定DF2的匹配键;
  • how='inner'表示只保留两边都存在匹配值的行,自动过滤掉无匹配的行;
  • 若两表存在重名列,merge会自动添加后缀(如_x对应DF1列,_y对应DF2列),可通过suffixes=('_df1', '_df2')自定义后缀。

方法二:基于你原思路修正

如果想保留“先标记匹配状态,再过滤合并”的逻辑,可按以下步骤修改:

# 给DF1添加匹配标记列
source_df['result'] = source_df['iTOW'].isin(sv_df['_iTOW']).astype(int)
# 过滤出有匹配的行
filtered_df = source_df[source_df['result'] == 1]
# 将过滤后的DF1与DF2合并,关联匹配行
result_df = filtered_df.merge(sv_df, left_on='iTOW', right_on='_iTOW')
# 可选:移除不再需要的result列
result_df = result_df.drop('result', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:32:31