如何用Pandas按被提名者分组合并行并拼接提名者与评论至新列?
解决方法
核心思路
先将提名者姓名与提名评论拼接成「提名者: 评论」的格式,再按**被提名者(Who)**分组,把同一被提名者的所有拼接内容合并到单个单元格中。
修正后的代码
import pandas as pd # 读取原始CSV文件 df = pd.read_csv('Colleague Award 2023(1-296).csv') # 保留需要的核心字段:提名者、被提名者、评论内容 df_clean = df[['Name', 'Who', 'Why']] # 生成"提名者: 评论"格式的组合字段 df_clean['Combined_Comment'] = df_clean['Name'] + ': ' + df_clean['Why'] # 按被提名者分组,用<br>拼接所有评论(适配Word邮件合并的换行需求) result = df_clean.groupby('Who', as_index=False).agg( Why=('Combined_Comment', '<br>'.join) ) # 保存整理后的CSV文件 result.to_csv('Colleage Award Collated.csv', index=False)
代码说明
- 筛选关键字段:直接提取
Name/Who/Why三列,比删除无关列更简洁直观。 - 拼接评论内容:创建
Combined_Comment列,将提名者和评论按要求格式组合。 - 正确分组聚合:
- 按
Who(被提名者)分组——这是你原有代码的核心错误(之前误按Name分组,得到的是提名者的评论集合)。 - 使用
<br>拼接评论,导入Word邮件合并时,单元格内会自动换行显示,和你示例中的格式完全匹配;如果需要纯文本换行,可将<br>替换为'\n'。
- 按
- 匹配输出列名:聚合时直接将合并后的字段命名为
Why,和你需要的输出列名一致。
最终输出格式
生成的CSV会完全符合你的需求:
| Who | Why |
|---|---|
| Joe Bloggs | Jane Doe: Joe is super helpful Gary Public: Joe always makes good coffee |
| Jane Doe | Joe Bloggs: Jane is a friendly face in the morning Gary Public: Jane makes my day better! |
| Jimmy Person | Jane Doe: Jimmy helps us out with our IT issues! |
内容的提问来源于stack exchange,提问作者JamChart
相关产品推荐
相关产品推荐

