如何在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)
代码说明
groupby('A', as_index=False):按A列分组,as_index=False保证分组后A列仍为普通列,而非索引agg(lambda x: ', '.join(x.astype(str))):对每个分组中的每一列(自动遍历所有非分组列)执行操作:- 先将列内所有值转为字符串(避免数值类型无法直接
join) - 用
,作为分隔符拼接所有值
- 先将列内所有值转为字符串(避免数值类型无法直接
- 该方案无需指定具体列名,新增列后无需修改代码,自动适配所有列
内容的提问来源于stack exchange,提问作者Stan
相关产品推荐
相关产品推荐

