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

Pandas DataFrame中按日期列聚合多值的高效替代迭代方法

优化方案分析与实现

原代码问题解析

你当前的代码存在两个核心问题:

  1. 存储错误原因:循环中使用df['Title']和df['Description']会取整个列的数据,而非当前行的对应值,导致每次拼接的是整列内容,而非单条记录的Title和Description。正确写法应该是row['Title']和row['Description']。
  2. 性能低下原因:iterrows()是逐行迭代,本质是Python层面的循环,对于大DataFrame来说效率极低,Pandas的优势在于向量化操作,应尽量避免逐行遍历。

更优实现方法:使用groupby+向量化聚合

利用Pandas的groupby功能按日期分组,结合字符串聚合操作,完全避免Python循环,性能会提升几个数量级。

实现步骤:

  1. 先为每行生成拼接后的字符串:\n{Title}\n{Description}
  2. 按Date列分组,将每组内的拼接字符串用换行符连接
  3. 将分组结果转换为字典,即为目标的news字典

代码示例:

# 生成每行的拼接字符串
df['content'] = '\n' + df['Title'] + '\n' + df['Description']

# 按Date分组并聚合,转成字典
news = df.groupby('Date')['content'].agg('\n'.join).to_dict()

验证结果:

对于你的示例DataFrame,最终news的内容为:

{
    '2003-02-10': '\nA\nage\nB\nnumber\nC\ntotal\nD\npercentage',
    '2003-02-11': '\nE\ndivision',
    '2003-02-12': '\nF\ncumulative',
    '2003-02-13': '\nG\nampersand\nH\nvalue'
}

额外优化点

如果不需要保留中间的content列,可以用链式调用简化代码:

news = (df.assign(content='\n' + df['Title'] + '\n' + df['Description'])
          .groupby('Date')['content']
          .agg('\n'.join)
          .to_dict())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:53:16