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

如何对Pandas DataFrame按日期聚合求和并实现按日单条记录展示?重塑与新建DataFrame哪种方案更优?

按日期聚合Pandas DataFrame的最优方案

嘿,其实你完全不用纠结重塑或者手动新建DataFrame——Pandas本身就有专门对付这类需求的分组聚合工具,这才是最直接高效的选择,比你提到的两种思路都靠谱多了。

你的需求本质就是按day列分组,对其他所有列做求和运算,这正是groupby搭配聚合函数的典型场景。既不需要绕弯子去重塑数据(比如melt/pivot这类操作反而会增加复杂度),也没必要手动去构建新DataFrame(容易出错还冗余)。

具体实现代码

先给你一个可直接运行的示例,方便你测试:

import pandas as pd

# 构造你提供的示例数据
data = {
    'day': [1,1,1,1,2,2,2],
    'x_count': [8,6,5,11,11,13,18],
    'x_max': [230,174,218,91,128,156,191],
    'y_count': [18,12,21,32,17,16,22],
    'y_max': [127,121,184,162,151,148,120]
}
df = pd.DataFrame(data)

# 核心聚合操作:按day分组,对所有列求和
aggregated_df = df.groupby('day', as_index=False).sum()

运行后得到的结果就是你想要的每日一条记录的聚合数据:

dayx_countx_maxy_county_max
13071383594
24247555419

(注:你示例里第一天的x_count写的是40,但按原始数据计算实际是30,应该是笔误啦,代码会严格基于输入数据做求和)

为什么不选你提到的两种方案?

  • 重塑DataFrame:比如先把宽表转成窄表(melt),分组后再转回来(pivot),这完全是画蛇添足。代码会更冗长,运行效率也更低,完全没必要走这个弯路。
  • 手动新建DataFrame:需要循环每一天,手动计算每列的和再拼接成新表。这种方法不仅代码繁琐,而且当数据量较大时,循环的性能远不如Pandas内置的向量化操作,还容易出现索引错误、列名不一致之类的小问题。

总结

直接用groupby+sum的方案就好,这是Pandas处理分组聚合需求的标准做法,简洁、高效还不容易出错,完全能满足你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:04:07