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

如何在Pandas中基于单列合并行(列数可变)

动态列DataFrame按指定列合并相同值行的解决方案

问题场景

现有一列名、列数均不固定的DataFrame,需要基于A列实现:

  • 若多行A列值相同,则合并为一行,其余列的对应值用逗号拼接
  • 若A列值唯一,则保留原行

示例输入

A          B             C           D          E
     U1        1              24          35         a
     V1        9              d           65         j
     V1        85             tv          107        k
     T2        12             7            37        l
     X         8              n           12         uk 
     Y         7              iu          120        pq
     Y         13             k1          77         rp

期望输出

A          B             C           D          E
     U1        1              24          35         a
     V1        9, 85          d,tv        65,107     j,k
     T2        12             7            37        l
     X         8              n           12         uk 
     Y         7,13           iu,k1       120,77     pq,rp

原固定列场景的逐列处理方式,因列数过多(100+)且可能新增列,无法适用,需批量处理方案。

解决方案

使用pandas的groupby结合agg方法,批量对所有非分组列执行拼接操作,无需指定列名:

import pandas as pd

# 构造示例DataFrame(实际场景可直接读取你的数据源)
data = {
    'A': ['U1', 'V1', 'V1', 'T2', 'X', 'Y', 'Y'],
    'B': [1, 9, 85, 12, 8, 7, 13],
    'C': ['24', 'd', 'tv', '7', 'n', 'iu', 'k1'],
    'D': [35, 65, 107, 37, 12, 120, 77],
    'E': ['a', 'j', 'k', 'l', 'uk', 'pq', 'rp']
}
df = pd.DataFrame(data)

# 核心处理逻辑:按A列分组,对所有列执行字符串拼接
df_out = df.groupby('A', as_index=False).agg(lambda x: ', '.join(x.astype(str)))

# 输出结果
print(df_out)

代码说明

  1. groupby('A', as_index=False):按A列分组,as_index=False保证分组后A列仍为普通列,而非索引
  2. agg(lambda x: ', '.join(x.astype(str))):对每个分组中的每一列(自动遍历所有非分组列)执行操作:
    • 先将列内所有值转为字符串(避免数值类型无法直接join)
    • 用, 作为分隔符拼接所有值
  3. 该方案无需指定具体列名,新增列后无需修改代码,自动适配所有列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:23:15