分享
为什么问答平台  ›  专栏  ›  技术社区  ›  b00kgrrl

python groupby、cumsum和max用于计算月末余额 - Python groupby, cumsum and max to calculate month-end balances

  •  1
  • b00kgrrl  · 技术社区  · 1 周前

    我有我按摩过的数据看起来像这样。

             Date    Amount Month   Balance
    0    9/4/2018  32000.00     9  32000.00
    1   9/30/2018     29.59     9  32029.59
    2   10/1/2018     34.05    10  32063.64
    3  10/31/2018  -1000.00    10  31063.64
    4   11/1/2018   1500.00    11  32563.64
    5  11/30/2018     33.06    11  32596.70
    6   12/1/2018  -2000.00    12  30596.70
    7  12/31/2018     34.26    12  30630.96
    

    我需要计算每个月末的余额和最高的月末余额。我尝试过GroupBy、Cumsum和Max的各种组合,但没有得到预期的结果。

    以下是迄今为止我所拥有的:

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

    我希望月底余额为:

    9   32029.59
    10  31063.64
    11  32596.70
    12  30630.96
    

    我希望月底余额最大为32596.70

    1 回复  |  直到 1 周前
        1
  •  1
  •   anky_91    1 周前

    Date 列到 datetime :

    df.Date=pd.to_datetime(df.Date,format='%m/%d/%Y')
    

    然后:

    m=(df.assign(cum_Amount=df.Amount.cumsum()).
      groupby(df.Date.dt.month)['cum_Amount'].max().reset_index())
    print(m)
    

       Date  cum_Amount
    0     9    32029.59
    1    10    31063.64
    2    11    32596.70
    3    12    30630.96
    

    编辑 似乎您已经有余额,您只想筛选月末日期,请使用:

    from pandas.tseries.offsets import MonthEnd
    df[df.Date.eq(df.Date+MonthEnd(0))]
    

            Date   Amount  Month   Balance
    1 2018-09-30    29.59      9  32029.59
    3 2018-10-31 -1000.00     10  31063.64
    5 2018-11-30    33.06     11  32596.70
    7 2018-12-31    34.26     12  30630.96