Python中按Seq优先级合并df_my与df_Out两个DataFrame的方法
Pandas合并DataFrame:保留指定优先序列的记录
我们需要合并两个DataFrame df_my 和 df_Out,合并规则为:
- 若
Seq存在于df_Out中,直接保留df_Out对应的记录 - 若
Seq仅存在于df_my中,保留df_my的对应记录
实现方法
可以通过以下步骤快速实现:
- 提取
df_Out中所有的Seq值,用于后续筛选 - 从
df_my中筛选出不在df_Out的Seq集合里的记录 - 合并
df_Out的全部记录和筛选后的df_my记录 - (可选)按
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
相关产品推荐
相关产品推荐

