【问题标题】:Pandas groupby and add total for numeric column and for time column ,want to add averagePandas groupby 并为数字列和时间列添加总计,想要添加平均值
【发布时间】:2021-11-24 20:53:12
【问题描述】:

 A      B     C    Time       D
1     sandy    12   02:30:24   California
2     sandy    22   01:24:06   California
3     sunny    8    05:03:52   Rhode Island
4     sunny    32   07:03:25    Rhode Island

Required output
 A      B      C   Time              D
1     sandy    12   02:30:24         California
2              22   01:24:06         California
sandy Total    34   01:57:15
3     sunny    8    05:03:52         Rhode Island
4              32   07:03:25        Rhode Island
sunny Total    40   06:03:38
      Total    74   04:00:27

想在每组末尾添加总计数字列和时间列的平均时间(我实际上有两个时间列)

【问题讨论】:

    标签: python pandas datetime pandas-groupby


    【解决方案1】:

    您可以通过.groupby() + agg().assign() 生成总计行,通过pd.Series() 生成总计行。然后,将.append() 附加到原始df,然后是sort_index() 将同一列重新排序在一起B('sandy','sunny'):

    df_total = (df.assign(Time=pd.to_timedelta(df['Time']))
                  .groupby('B')[['C', 'Time']]
                  .agg({'C': 'sum', 'Time': lambda x: str(x.mean().round('1s')).split()[-1]})
                  .assign(A='Total: ', D='')
               )
    
    df_grand_total = pd.Series({'A': '', 
                                'C': df['C'].sum(),
                                'Time': str(pd.to_timedelta(df['Time']).mean().round('1s')).split()[-1],
                                'D': ''},
                                name='~Grand Total:')
    
    df_final = (df.set_index('B')
                  .append(df_total)
                  .append(df_grand_total)              
                  .sort_index()
                  .reset_index()
               )
    

    结果:

    print(df_total)
    
            C      Time        A D
    B                             
    sandy  34  01:57:15  Total:   
    sunny  40  06:03:38  Total:   
    
    
    print(df_grand_total)
    
    A               
    C             74
    Time    04:00:27
    D               
    Name: ~Grand Total:, dtype: object
    
    
    print(df_final)
    
                   B        A   C      Time             D
    0          sandy        1  12  02:30:24    California
    1          sandy        2  22  01:24:06    California
    2          sandy  Total:   34  01:57:15              
    3          sunny        3   8  05:03:52  Rhode Island
    4          sunny        4  32  07:03:25  Rhode Island
    5          sunny  Total:   40  06:03:38              
    6  ~Grand Total:           74  04:00:27              
    

    【讨论】:

    • 以及如何在末尾添加按列总计和总平均值。
    • @SanjuM 查看我对支持总计的增强功能的编辑。
    • @SanjuM 微调了代码。您可以参考最新的编辑。
    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 2021-04-23
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多