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

基于df1与df2构建新DataFrame:优先保留df1的frn,缺失时取df2值

Pandas DataFrame按规则合并填充

原始数据

现有两个Pandas DataFrame:

import pandas as pd

df1 = pd.DataFrame({'call_sign': ['ASD','BSD','CDSF','GFDFD','FHHH'],'frn':['123','124','','656','']})

df2 = pd.DataFrame({'call_sign': ['ASD','CDSF','BSD','GFDFD','FHHH'],'frn':['1234','','124','','765']})

需求说明

要生成新的DataFrame,满足:

  • call_sign的排列顺序和df1完全一致
  • frn字段优先使用df1对应行的值;若df1中该位置frn为空字符串,则取df2中相同call_sign对应的frn值

目标结果

最终得到的DataFrame如下:

df_result = pd.DataFrame({'call_sign': ['ASD','BSD','CDSF','GFDFD','FHHH'],'frn':['123','','124','656','765']})

解决方案

方法一:映射填充缺失值

先把df2转换成call_sign到frn的映射表,再对df1的空值进行填充:

# 构建df2的call_sign与frn的映射关系
frn_map = df2.set_index('call_sign')['frn']

# 复制df1作为结果基础,处理frn字段
df_result = df1.copy()
# 把空字符串转为缺失值,填充后若仍有缺失则转回空字符串
df_result['frn'] = df_result['frn'].replace('', pd.NA).fillna(df_result['call_sign'].map(frn_map)).fillna('')

方法二:条件判断赋值

用numpy.where直接通过条件逻辑赋值,思路更直观:

import numpy as np

df_result = df1.copy()
# 当df1的frn不为空时用自身值,否则取df2对应call_sign的frn值
df_result['frn'] = np.where(df_result['frn'] != '', 
                            df_result['frn'], 
                            df_result['call_sign'].map(df2.set_index('call_sign')['frn']))

两种方法都能精准实现需求,且完整保留df1的call_sign顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:11:03