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

Python中按Seq优先级合并df_my与df_Out两个DataFrame的方法

Pandas合并DataFrame:保留指定优先序列的记录

我们需要合并两个DataFrame df_my 和 df_Out,合并规则为:

  • 若Seq存在于df_Out中,直接保留df_Out对应的记录
  • 若Seq仅存在于df_my中,保留df_my的对应记录

实现方法

可以通过以下步骤快速实现:

  1. 提取df_Out中所有的Seq值,用于后续筛选
  2. 从df_my中筛选出不在df_Out的Seq集合里的记录
  3. 合并df_Out的全部记录和筛选后的df_my记录
  4. (可选)按Seq排序,保持结果的有序性

代码示例

首先模拟示例中的数据:

import pandas as pd

# 模拟df_my数据
df_my = pd.DataFrame({
    'Seq': [1,2,3,20,21],
    'Grp': ['A','A','F','A','C'],
    'Lvl': [1,2,1,1,3],
    'Distance': [71,50,35,68,25]
})

# 模拟df_Out数据
df_Out = pd.DataFrame({
    'Seq': [2,3,21],
    'Grp': ['J','K','S'],
    'Lvl': [9,6,8],
    'Distance': [50,35,25]
})

然后执行合并操作:

# 提取df_Out中的所有Seq
out_seqs = df_Out['Seq'].unique()

# 筛选df_my中不在df_Out里的Seq记录
my_filtered = df_my[~df_my['Seq'].isin(out_seqs)]

# 合并两部分数据
df_Final = pd.concat([my_filtered, df_Out], ignore_index=True)

# 按Seq排序(可选,根据需求决定是否需要)
df_Final = df_Final.sort_values('Seq').reset_index(drop=True)

print(df_Final)

输出结果

运行后会得到符合需求的df_Final:

Seq Grp  Lvl  Distance
0    1   A    1        71
1    2   J    9        50
2    3   K    6        35
3   20   A    1        68
4   21   S    8        25

补充说明

如果需要排除df_Out中Distance>55的记录(即这些Seq不使用df_Out的,而是保留df_my的),可以先对df_Out做过滤:

# 先过滤df_Out中Distance>55的记录
df_Out_filtered = df_Out[df_Out['Distance'] <= 55]
out_seqs = df_Out_filtered['Seq'].unique()

# 后续步骤同上
my_filtered = df_my[~df_my['Seq'].isin(out_seqs)]
df_Final = pd.concat([my_filtered, df_Out_filtered], ignore_index=True).sort_values('Seq').reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:20:36