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

按指定列值分组Pandas多列DataFrame的实现方法求助

解决Pandas按列分组并合并多列内容的问题

嘿,这问题我熟!你已经找到了单列合并的方法,要扩展到所有列其实很简单,用groupby搭配agg方法就能搞定,还能针对不同列的类型设置不同的合并规则。来看看具体怎么做:

首先,先还原你的示例DataFrame:

import pandas as pd

data = {
    'col1': ['a', 'b', 'a', 'd', 'b'],
    'col2': ['p', 'q', 'r', 's', 't'],
    'col3': ['u', 'v', 'w', 'x', 'y'],
    'col4': [0, 1, 2, 3, 4]
}
df = pd.DataFrame(data, index=['row1', 'row2', 'row3', 'row4', 'row5'])

方法1:针对每列指定合并规则

因为你的col4是数值类型,其他列是字符串,我们可以给每个列单独设置合并方式:

# 按col1分组,对不同列应用不同的合并逻辑
result = df.groupby('col1').agg({
    'col2': ' '.join,  # 字符串列用空格拼接
    'col3': ' '.join,
    'col4': lambda x: ','.join(map(str, x))  # 数值列转字符串后用逗号拼接
}).reset_index()

方法2:通用自动适配的合并函数

如果你的DataFrame列很多,不想逐个指定,可以写一个通用函数,自动根据列的类型选择合并方式:

def merge_column_values(series):
    # 如果是字符串类型,用空格拼接;数值类型转字符串后用逗号拼接
    if series.dtype == 'object':
        return ' '.join(series)
    else:
        return ','.join(map(str, series))

# 对所有列应用这个通用函数
result = df.groupby('col1').agg(merge_column_values).reset_index()

最终结果

运行上面的代码后,result就是你想要的结构:

col1 col2 col3 col4
0    a  p r  u w  0,2
1    b  q t  v y  1,4
2    d    s    x    3

这里的reset_index()是把分组的col1从索引重新变回普通列,让结果和你期望的结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:37:21