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

如何在Pandas中批量合并名称相似的对应列?

批量合并DataFrame中数值与单位列

我有一个结构如下的DataFrame:

import pandas as pd
df = pd.DataFrame({"a.1":[1, 2, 3], "a.2": ['mg', 'mg', 'mg'],
                   "b.1": [7, 8, 9], "b.2":['g', 'g', 'g'],
                   "c.1":[4, 5, 6], "c.2":["lb", "lb", "lb"]})

其中,以.1结尾的列是数值,对应以.2结尾的列中的单位。我希望按a.1与a.2、b.1与b.2、c.1与c.2的模式合并列,将6列合并为3列,每列包含数值与单位的组合。

我目前仅了解如何按条件将多列合并为一列,但想知道是否可以一次性批量合并所有目标列,而非逐对合并?

期望输出如下:

out = pd.DataFrame({"a": ["1mg", "2mg", "3mg"],
                    "b": ["7g", "8g", "9g"],
                    "c": ["4lb", "5lb", "6lb"]})

方法1:按列名前缀循环批量处理

提取列名的前缀(如a、b、c),遍历前缀完成对应列的拼接:

# 提取并排序所有列名的前缀
prefixes = sorted(set(col.split('.')[0] for col in df.columns))

# 初始化结果DataFrame
result = pd.DataFrame()

# 批量拼接每一对数值-单位列
for prefix in prefixes:
    result[prefix] = df[f"{prefix}.1"].astype(str) + df[f"{prefix}.2"]

方法2:用groupby按前缀分组聚合

利用groupby按列名前缀分组,通过聚合函数一次性完成所有拼接:

# 按列名前缀分组,对每组的两列执行拼接操作
result = df.groupby(lambda col: col.split('.')[0], axis=1).agg(
    lambda x: x.iloc[:, 0].astype(str) + x.iloc[:, 1]
)

这里lambda col: col.split('.')[0]用于提取列名前缀作为分组键,axis=1指定按列分组,聚合函数中取每组第一列(数值列)转字符串后与第二列(单位列)拼接。

方法3:重塑DataFrame后拼接(适用于复杂结构)

先将宽表转长表,分组拼接后再转回宽表:

# 重置索引并转长格式
df_long = df.reset_index().melt(id_vars='index', var_name='col', value_name='val')
# 拆分列名为前缀和类型(数值/单位)
df_long[['prefix', 'type']] = df_long['col'].str.split('.', expand=True)
# 按索引和前缀分组拼接,再转回宽格式
result = df_long.groupby(['index', 'prefix'])['val'].agg(''.join).unstack('prefix').reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:07:26