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

Pandas匹配两个DataFrame的姓名年份,合并score值到summary列

问题原因

  • 原有代码仅处理了m_count == 1的行,m_count = 2的行直接跳过,所以对应summary保留了初始值0
  • 就算去掉m_count的判断逻辑,原有赋值逻辑是直接覆盖旧值,遇到多个匹配的score值时只会保留最后一个,无法实现多值拼接
  • 嵌套遍历DataFrame的写法效率极低,数据量稍大就会严重影响运行速度

解决方案

用Pandas内置的分组聚合+左合并实现需求,代码如下:

import pandas as pd

lst = [['juli', 25,2010], ['krish', 30,2020],
       ['nick', 26, 2021], ['juli', 22,2020],['juli', 54,2010]]
df = pd.DataFrame(lst, columns =['Name', 'score',"year"])

lst1 = [['juli', 2,2010], ['krish', 1,2020],
       ['nick', 1, 2021], ['juli', 1,2020] ]
df1 = pd.DataFrame(lst1, columns =['Name', 'm_count',"year"])

# 按Name和year分组,将score拼接为逗号分隔的字符串
df_score_agg = df.groupby(['Name', 'year'], as_index=False)['score'].agg(
    lambda x: ','.join(x.astype(str))
)

# 合并到df1中生成summary字段
df1 = df1.merge(df_score_agg, on=['Name', 'year'], how='left').rename(columns={'score': 'summary'})

print(df1)

运行结果

Name  m_count  year summary
0   juli        2  2010   25,54
1  krish        1  2020      30
2   nick        1  2021      26
3   juli        1  2020      22

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:45:03