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

Pandas按日期分组求和:DataFrame行数不匹配问题求助

解决方案

核心思路

你的报错原因是df2.groupby(["D"]).agg({"E": sum})的结果行数和df1的行数不匹配,直接赋值必然触发长度错误。最优方案是用pandas向量化操作替代逐行循环,既高效又简洁。

步骤1:先对df2按日期聚合求和

先处理df2,生成「日期-对应E列总和」的映射关系:

# 生成索引为日期、值为对应E列总和的Series
sum_series = df2.groupby("D")["E"].sum()

步骤2:将聚合结果匹配到df1的日期列

用map方法自动匹配df1的A列日期,缺失的日期会返回NaN,可按需填充为0:

# 直接匹配,缺失日期显示NaN
df1["E_sum"] = df1["A"].map(sum_series)

# 若希望缺失日期的总和显示为0,添加fillna
df1["E_sum"] = df1["A"].map(sum_series).fillna(0)

为什么比iterrows更优?

  • 向量化操作是pandas原生优化的计算方式,数据量越大,对比逐行循环的性能优势越明显;
  • 代码逻辑清晰,无需手动处理索引位置,避免iloc可能带来的越界或匹配错误。

示例验证

假设测试数据:

import pandas as pd

df1 = pd.DataFrame({"A": ["2023-01-01", "2023-01-02", "2023-01-03"]})
df2 = pd.DataFrame({
    "D": ["2023-01-01", "2023-01-01", "2023-01-02"],
    "E": [10, 20, 30]
})

sum_series = df2.groupby("D")["E"].sum()
df1["E_sum"] = df1["A"].map(sum_series).fillna(0)

最终df1结果:

AE_sum
2023-01-0130
2023-01-0230
2023-01-030

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:25:16