【问题标题】:How to sum by month in timestamp Data Frame?如何在时间戳数据框中按月求和?
【发布时间】:2021-04-27 15:30:47
【问题描述】:

我有这样的数据框:

trx_date trx_amount
2013-02-11 35
2014-03-10 26
2011-02-9 10
2013-02-12 5
2013-01-11 21

我如何过滤到月份和年份?这样我就可以总结 trx_amount

示例预期输出:

trx_monthly trx_sum
2013-02 40
2013-01 21
2014-02 35

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    您可以通过Series.dt.to_period 将值转换为月份,然后聚合sum:

    df['trx_date'] = pd.to_datetime(df['trx_date'])
    
    df1 = (df.groupby(df['trx_date'].dt.to_period('m').rename('trx_monthly'))['trx_amount']
            .sum()
            .reset_index(name='trx_sum'))
    print (df1)
      trx_monthly  trx_sum
    0     2011-02       10
    1     2013-01       21
    2     2013-02       40
    3     2014-03       26
    

    或者通过Series.dt.strftime将日期时间转换为YYYY-MM格式的字符串:

    df2 = (df.groupby(df['trx_date'].dt.strftime('%Y-%m').rename('trx_monthly'))['trx_amount']
             .sum()
             .reset_index(name='trx_sum'))
    print (df2)
      trx_monthly  trx_sum
    0     2011-02       10
    1     2013-01       21
    2     2013-02       40
    3     2014-03       26
    

    或者转换成月份和年份,那么输出就不同了——3列:

    df2 = (df.groupby([df['trx_date'].dt.year.rename('year'), 
                      df['trx_date'].dt.month.rename('month')])['trx_amount']
             .sum()
             .reset_index(name='trx_sum'))
    print (df2)
       year  month  trx_sum
    0  2011      2       10
    1  2013      1       21
    2  2013      2       40
    3  2014      3       26
    

    【讨论】:

      【解决方案2】:

      你可以试试这个-

      df['trx_month'] = df['trx_date'].dt.month
      
      df_agg = df.groupby('trx_month')['trx_sum'].sum()
      

      【讨论】:

        猜你喜欢
        • 2019-01-10
        • 1970-01-01
        • 2020-04-20
        • 2021-07-09
        • 2017-09-12
        • 2012-04-17
        • 2014-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多