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

如何在Pandas DataFrame中按Name列聚合指定列的单元格值为拼接字符串

如何在Pandas DataFrame中按Name列聚合指定列的单元格值为拼接字符串

嘿,我来帮你搞定这个按Name聚合拼接列值的需求!其实不用拆分行再追加这么麻烦,用Pandas的groupby配合聚合函数就能轻松实现,而且效率还更高。

首先,先把你的示例数据构造出来方便复现:

import pandas as pd

data = {
    'Email': ['john.cena@gmail.com', 'damian.doe@gmail.com', 'john.smith@gmail.com'],
    'Col1': ['CellStr11', 'CellStr11', 'CellStr21'],
    'Col2': [1.4, 1.2, 1.2],
    'Col3': ['CellStr13', 'CellStr13', 'CellStr23'],
    'Name': ['John Cena', 'Matt Smith', 'John Cena']
}
df = pd.DataFrame(data)

方法一:用groupby+agg实现(推荐)

这种方法最简洁高效,我们可以自定义一个拼接函数,然后对需要聚合的列应用这个函数,同时处理好不同数据类型的转换(比如Col2是数值型,要先转成字符串再拼接):

# 定义通用的拼接函数,把列内所有值转成字符串后用' / '连接
def join_with_slash(series):
    return ' / '.join(map(str, series))

# 按Name分组,指定每个列的聚合规则
aggregated_df = df.groupby('Name').agg({
    'Email': 'first',  # 保留每组的第一个Email,要是想拼接所有Email也可以用join_with_slash
    'Col1': join_with_slash,
    'Col2': join_with_slash,
    'Col3': join_with_slash
}).reset_index()

# 调整列顺序和你给出的示例一致
aggregated_df = aggregated_df[['Email', 'Col1', 'Col2', 'Col3', 'Name']]
print(aggregated_df)

运行后就能得到你想要的结果:

Email                  Col1      Col2                  Col3        Name
0  damian.doe@gmail.com             CellStr11       1.2             CellStr13  Matt Smith
1   john.cena@gmail.com  CellStr11 / CellStr21  1.4 / 1.2  CellStr13 / CellStr23   John Cena

方法二:用groupby+apply配合lambda

如果你更倾向于用apply和lambda的方式,也可以这么写:

aggregated_df_apply = df.groupby('Name').apply(lambda group: pd.Series({
    'Email': group['Email'].iloc[0],
    'Col1': ' / '.join(group['Col1']),
    'Col2': ' / '.join(map(str, group['Col2'])),
    'Col3': ' / '.join(group['Col3'])
})).reset_index()

这里的group是每个分组对应的子DataFrame,我们直接提取每个列的值进行拼接,逻辑和第一种方法类似,只是写法更灵活一点。

关于你之前的思路

你提到的拆分数据然后追加列的方法其实没必要,因为分组聚合后每个Name只会保留一行,所有列都会存在,不会出现部分行有额外列的情况,而且分组聚合的代码更简洁易维护。

要是还有其他疑问或者需要调整的地方,随时说哦~

备注:内容来源于stack exchange,提问作者badbadllama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:49:34