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

pandas按village>town>city优先级合并三列为一列的方法

Pandas按指定优先级合并多列非空值方案

需求说明

处理包含code、town、village、city四个字段的DataFrame,其中town、village、city字段存在部分NaN空值,需将三列合并为单个结果列,取值优先级为:village > town > city,即优先取village列非空值,village为空时取town列非空值,town也为空时取city列值,最终输出保留code列与合并后的新列。

实现代码

使用pandas原生的行方向反向填充方法实现,无需逐行遍历,性能优于自定义apply函数:

import pandas as pd
import numpy as np

# 核心处理逻辑
# 1. 按优先级从高到低排列待合并列:village > town > city
# 2. 行维度反向填充空值,空值自动用后方最近的非空值补全
# 3. 取每行第一列的值即为按优先级匹配的结果
df['merged_col'] = df[['village', 'town', 'city']].bfill(axis=1).iloc[:, 0]

# 筛选输出需要的列
result = df[['code', 'merged_col']]

效果验证

构造测试数据集验证逻辑:

# 测试样例数据
df = pd.DataFrame({
    'code': ['001', '002', '003', '004', '005'],
    'town': [np.nan, '阳关镇', '七里镇', np.nan, '月牙泉镇'],
    'village': ['杨家桥村', np.nan, '杜家墩村', np.nan, np.nan],
    'city': ['敦煌市', '敦煌市', '敦煌市', '嘉峪关市', '敦煌市']
})

运行上述处理逻辑后输出结果:

codemerged_col
001杨家桥村
002阳关镇
003杜家墩村
004嘉峪关市
005月牙泉镇

补充说明

如果存在三列全为NaN的行,最终合并结果会保留NaN,需要设置默认填充值的话,可在取值后追加.fillna('你要设置的默认值')即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:48:17