如何按年份分组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
相关产品推荐
相关产品推荐

