You need to enable JavaScript to run this app. Python使用pandas合并同名行notes列内容的代码调整问题
优惠活动
大模型
产品
解决方案
定价
更多

Python使用pandas合并同名行notes列内容的代码调整问题

Pandas同姓名行notes内容合并实现

需求说明

现有包含name、notes两列的大型表格,需要实现以下逻辑:

  • 遍历name列时,若当前行name值与上一行相同,就将当前行的notes内容追加到上一行notes末尾,再删除当前行
  • 若不匹配则将当前name作为新的匹配基准继续遍历
  • 原有代码仅支持匹配固定姓名Jason,需改为支持匹配任意仅含字母、可带空格的姓名
  • 最终输出每个姓名对应所有notes内容用逗号加空格拼接的结果

测试数据

import pandas as pd

data = {'name': ['Jason', 'Jason', 'Molly Jin', 'Molly Jin', 'Molly Jin',
                'Tina', 'Tina', 'Tina','Jake Robins', 'Amy','Amy'],
       'notes': ['Are you ok', 'just fine', 'I am here', 'where are you', 'over here',
                 'guest what','what','your funny','I am not here','what flavor','rasberry'] }

df = pd.DataFrame(data)

原有代码缺陷

原有代码通过固定字符串匹配Jason,仅能对该姓名的行做合并,无法适配所有符合规则的姓名,也不能实现全量同姓名行的合并:

s = df['name'].shift(-1)                 #Looks for the row previous names col.
t = df['notes'].shift(-1)                #Looks for the row revious notes col.
m = s.str.startswith('Jason', na=False)  #Searches names col for name (needs a wildcard search)
df.loc[m, 'notes'] += (', ' + t[m])      #grabs adjacent notes col. data and appends to previous 
                                         #notes cell value with comma/space separator.

print(df) 

优化后代码

针对大型表格的性能需求,直接用pandas分组聚合实现,无需手动遍历,自动适配所有符合格式的姓名:

# 按name字段分组,将同姓名的所有notes用逗号+空格拼接
res_df = df.groupby('name', as_index=False, sort=False)['notes'].agg(', '.join)
print(res_df)

注:加sort=False参数可以保持原始数据中姓名的出现顺序,和需求的遍历逻辑输出顺序一致。

输出结果

name                                  notes
0        Jason                Are you ok, just fine
1    Molly Jin  I am here, where are you, over here
2         Tina       guest what, what, your funny
3  Jake Robins                        I am not here
4          Amy             what flavor, rasberry

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 19:15:04