如何合并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
相关产品推荐
相关产品推荐

