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

如何通过Pandas分组去重并合并字符串列?非聚合场景实现

嘿,我懂你的意思了——你想把DataFrame里同组重复项的字符串列合并起来,但又不想用那种常规groupby聚合后丢掉其他行的操作对吧?其实有几种灵活的办法能搞定,我给你拆解下:

方法1:保留所有行,添加合并后的字符串列(用transform)

这应该就是你说的「不需要聚合函数的groupby操作」——transform不会把行聚合起来,而是把分组计算的结果广播到每一行,完美保留原数据结构。

举个实际例子,假设你的example DataFrame结构如下:

import pandas as pd

example = pd.DataFrame({
    'school_lvl': ['Elem', 'Elem', 'Middle', 'Middle'],
    'schl_name': ['Sunny', 'Sunny', 'Oak', 'Oak'],
    'elem_name': ['Sunny Elem', 'Sunny Elem', 'Oak Middle', 'Oak Middle'],
    'remarks': ['Clean', 'Friendly', 'Large', 'Modern']
})

执行下面的代码,就能给每一行添加上对应elem_name分组下合并后的remarks:

# 按elem_name分组,合并remarks列并映射到每一行
example['merged_remarks'] = example.groupby('elem_name')['remarks'].transform(lambda x: ', '.join(x))

输出结果会是:

school_lvlschl_nameelem_nameremarksmerged_remarks
ElemSunnySunny ElemCleanClean, Friendly
ElemSunnySunny ElemFriendlyClean, Friendly
MiddleOakOak MiddleLargeLarge, Modern
MiddleOakOak MiddleModernLarge, Modern

方法2:合并重复分组为单行(灵活聚合)

如果你想把同一分组的行合并成唯一一行,同时合并字符串列,用groupby+agg也很直观——这里的「聚合」其实就是字符串拼接,完全符合你的合并需求。

比如还是上面的例子,执行:

# 按分组键聚合,合并remarks列,其他列保留第一个值
result = example.groupby(['school_lvl', 'schl_name', 'elem_name'], as_index=False).agg(
    merged_remarks=('remarks', ', '.join)
)

得到的结果是去重后的分组行,带合并后的字符串:

school_lvlschl_nameelem_namemerged_remarks
ElemSunnySunny ElemClean, Friendly
MiddleOakOak MiddleLarge, Modern

方法3:针对特定重复列合并

如果你的「重复项」是指某几列(比如school_lvl和schl_name)完全重复,想合并对应的字符串列,可以先分组合并,再和去重后的原数据合并:

# 先分组合并目标字符串列
merged_strings = example.groupby(['school_lvl', 'schl_name'])['remarks'].apply(', '.join).reset_index()
# 合并回原数据,只保留唯一分组行
final_result = example.drop_duplicates(['school_lvl', 'schl_name']).merge(merged_strings, on=['school_lvl', 'schl_name'])

这样能精准针对你指定的重复列进行合并操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:46:52