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

如何按年份分组DataFrame并求和生成新DataFrame?问题求解

问题解决:按年份分组求和生成指定列的DataFrame

问题描述

现有如下DataFrame:

Date                Amount
2024-01-04          0.34
2023-09-28          0.33
2023-06-22          0.33
2023-03-23          0.32
2023-01-05          0.32
2006-04-06          0.12
2006-01-05          0.12
2005-10-06          0.10
2005-07-07          0.10
2005-04-07          0.09

需按年份分组,对Amount列求和,生成包含year和sum列的新DataFrame,但执行以下代码后仅得到含Amount列的一维DataFrame:

df = df.groupby(df['Date'].dt.year, as_index=False).agg({'Gross Amount':'sum'})

错误原因

  • 列名不匹配:原DataFrame的金额列是Amount,但代码中使用了不存在的Gross Amount作为聚合键
  • 分组结果列名未指定:df['Date'].dt.year作为分组键时,结果列名默认是Date,未按需求命名为year,求和列也未指定为sum

正确解决方案

步骤1:确保Date列为datetime类型(若未转换)

如果Date列还不是datetime格式,先执行转换:

import pandas as pd
df['Date'] = pd.to_datetime(df['Date'])

步骤2:实现分组求和并指定列名

提供两种简洁实现方式:

方式一:分组时直接指定列名映射

df_result = df.groupby(df['Date'].dt.year, as_index=False).agg(
    year=('Date', lambda x: x.dt.year.iloc[0]),
    sum=('Amount', 'sum')
)

方式二:分组后重命名列

df_result = df.groupby(df['Date'].dt.year, as_index=False)['Amount'].sum()
df_result.columns = ['year', 'sum']

最终结果示例

执行后得到的df_result如下:

year   sum
0  2005  0.29
1  2006  0.24
2  2023  1.30
3  2024  0.34

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:25:08