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

如何合并DataFrame中表头含相同子串的列并重命名?

Pandas合并同前缀列并保留首列重命名

原始数据

首先定义初始DataFrame:

import numpy as np
import pandas as pd 

data = pd.DataFrame({
    "ColA:1":[12, 20, 31, np.nan, np.nan, np.nan],
    "ColA:2":[np.nan, np.nan, 28, 78, 23, 25],
    "ColB":[np.nan, np.nan, 23, 56, 12, 3],
    "ColC:1":[56, 10, 35, 67, np.nan, np.nan],
    "ColC:2":[np.nan, 56, 28, 78, 23, np.nan],
    "ColC:3":[np.nan, np.nan, np.nan, 43, 17, 8]
})

初始输出:

ColA:1  ColA:2  ColB  ColC:1  ColC:2  ColC:3
0    12.0     NaN   NaN    56.0     NaN     NaN
1    20.0     NaN   NaN    10.0    56.0     NaN
2    31.0    28.0  23.0    35.0    28.0     NaN
3     NaN    78.0  56.0    67.0    78.0    43.0
4     NaN    23.0  12.0     NaN    23.0    17.0
5     NaN    25.0   3.0     NaN     NaN     8.0

初步合并(已完成)

通过groupby+bfill完成同前缀列的填充:

df_combined = data.groupby(lambda x: x.split(':')[0], axis=1).bfill()

初步合并后输出:

ColA:1  ColA:2  ColB  ColC:1  ColC:2  ColC:3
0    12.0     NaN   NaN    56.0     NaN     NaN
1    20.0     NaN   NaN    10.0    56.0     NaN
2    31.0    28.0  23.0    35.0    28.0     NaN
3    78.0    78.0  56.0    67.0    78.0    43.0
4    23.0    23.0  12.0    23.0    23.0    17.0
5    25.0    25.0   3.0     8.0     8.0     8.0

最终处理:保留每组首列并重命名

基于df_combined,再次按列前缀分组,取每组的第一列即可自动完成重命名:

result = df_combined.groupby(lambda x: x.split(':')[0], axis=1).first()

最终输出:

ColA  ColB  ColC
0  12.0   NaN  56.0
1  20.0   NaN  10.0
2  31.0  23.0  35.0
3  78.0  56.0  67.0
4  23.0  12.0  23.0
5  25.0   3.0   8.0

一步到位方案

如果不想拆分两步,也可以直接在分组后完成填充、取首列的操作:

result = data.groupby(lambda x: x.split(':')[0], axis=1).apply(lambda g: g.bfill(axis=1).iloc[:, 0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:27:47