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

使用Python的groupby、cumsum和max计算月末余额及最高值

解决每月月末余额及最高余额计算问题

问题背景

你有如下交易数据记录(包含日期、交易金额、月份和当前余额):

DateAmountMonthBalance
09/4/201832000.00932000.00
19/30/201829.59932029.59
210/1/201834.051032063.64
310/31/2018-1000.001031063.64
411/1/20181500.001132563.64
511/30/201833.061132596.70
612/1/2018-2000.001230596.70
712/31/201834.261230630.96

你的需求是:

  • 计算每个月的月末余额(即每个月最后一笔交易后的余额)
  • 找出所有月末余额中的最高值

你尝试了以下代码,但未得到预期结果:

month_end_balance = yearly_df.groupby('Month')['Amount'].cumsum()
max_month_end_balance = month_end_balance.max()

错误原因分析

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

  1. groupby('Month')['Amount'].cumsum() 是对每个月内的交易金额单独累加,但你的Balance列本身已经是全局累计的结果,单独累加每月的Amount无法得到正确的月末余额(比如10月单独累加的结果是34.05-1000=-965.95,但实际月末余额是基于9月的余额继续计算的)。
  2. 即使累加逻辑正确,cumsum()会返回每行的累加值,而非每个月的最后一个值,所以无法直接提取月末余额。

正确解决方案

由于你的Balance列已经是每笔交易后的实时余额,我们只需要提取每个月最后一条记录的Balance即可,这就是该月的月末余额。具体代码如下:

步骤1:计算每月月末余额

# 按Month分组,取每组最后一行的Balance作为月末余额
month_end_balance = yearly_df.groupby('Month')['Balance'].last()

执行后会得到你期望的结果:

Month
9     32029.59
10    31063.64
11    32596.70
12    30630.96
Name: Balance, dtype: float64

步骤2:计算最高月末余额

直接对上面的结果调用max()即可:

max_month_end_balance = month_end_balance.max()

结果为:32596.70

额外说明

如果你的数据没有预先计算好Balance列,需要从Amount从头累计计算的话,可以这样处理:

# 先计算全局累计余额
yearly_df['Calculated_Balance'] = yearly_df['Amount'].cumsum()
# 再取每月最后一行的累计余额
month_end_balance = yearly_df.groupby('Month')['Calculated_Balance'].last()
max_month_end_balance = month_end_balance.max()

这也能得到和你期望一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:00:20