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

如何合并Pandas DataFrame中拼写不同的同含义列

合并同含义不同列名的DataFrame列方案

该方案采用pandas原生向量化操作,全程无行级循环,底层由C实现,处理百万/千万级数据时性能远高于Python循环实现,完全满足大数据量业务场景要求。

核心实现代码

import pandas as pd
import numpy as np

# 原始示例数据
df_is = pd.DataFrame({
    "C1": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    "C2": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
    "C3": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
    "C4": ["S", np.NaN, "F", np.NaN, np.NaN, "S", "F", np.NaN, np.NaN, np.NaN],
    "c4": [np.NaN, "S", np.NaN, np.NaN, "S", np.NaN, np.NaN, np.NaN, np.NaN, "F"]
})

# 1. 定义同含义的列组,多组重复列可定义多组分别处理
merge_col_group = ["C4", "c4"]
# 2. 沿行方向回填空值,自动取非空值合并,仅保留第一列作为合并结果
df_is["C4"] = df_is[merge_col_group].bfill(axis=1).iloc[:, 0]
# 3. 删除多余的重复列
df_is.drop(columns=[col for col in merge_col_group if col != "C4"], inplace=True)

结果验证

执行代码后df_is的输出完全符合预期:

C1 C2 C3   C4
0   1  a  A    S
1   2  b  B    S
2   3  c  C    F
3   4  d  D  NaN
4   5  e  E    S
5   6  f  F    S
6   7  g  G    F
7   8  h  H  NaN
8   9  i  I  NaN
9  10  j  J    F

批量处理多组重复列的扩展方案

如果存在多组列名拼写不同但含义相同的列(比如同时有C4/c4、C5/c_5、C6/ C6等),可以用归一化列名的方式批量处理,仅需遍历列组(列数量远少于行,不影响性能):

# 自定义列名归一化规则,可根据实际场景调整(比如统一转大写、去除特殊符号/空格等)
def normalize_col_name(col: str) -> str:
    return col.upper().replace("_", "").replace(" ", "")

# 按归一化后的列名分组
col_groups = {}
for col in df_is.columns:
    norm_col = normalize_col_name(col)
    col_groups.setdefault(norm_col, []).append(col)

# 批量合并所有同组列
for norm_col, raw_cols in col_groups.items():
    if len(raw_cols) > 1:
        df_is[norm_col] = df_is[raw_cols].bfill(axis=1).iloc[:, 0]
        df_is.drop(columns=[c for c in raw_cols if c != norm_col], inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:03