总计和除以agg

时间:2019-03-25 16:41:49

标签: python pandas pandas-groupby

我正在尝试做大熊猫groupby和聚合。 我有两列的总和,我还需要两列的总和的除法。

tdf = pd.DataFrame(
    [
        {
        'app' : 'A',
         'num_requests'    : 100,
         'sum_resp_time' : 50000
        },
        {
        'app' : 'A',
         'num_requests'    : 50,
         'sum_resp_time' : 40000
        },
        {
        'app' : 'A',
         'num_requests'    : 70,
         'sum_resp_time' : 8000
        },
        {
        'app' : 'B',
         'num_requests'    : 100,
         'sum_resp_time' : 3000
        },
        {
        'app' : 'B',
         'num_requests'    : 10,
         'sum_resp_time' : 2000
        },
        {
        'app' : 'C',
         'num_requests'    : 1000,
         'sum_resp_time' : 500000
        },
        {
        'app' : 'C',
         'num_requests'    : 120,
         'sum_resp_time' : 52000
        }
    ]
)

(
    tdf 
    .groupby
    (        
        ['app']
    ) 
    .agg 
    ( 
        { 
            'num_requests' : ['sum'],             
            'sum_resp_time' : ['sum'],
            #'average_resp_time' : lambda x : x['sum_resp_time'].sum()  / x['num_requests'].sum()
        } 
    )

)

如何使“ average_resp_time”工作,目前已被注释掉。 我当前的平均计算会引发错误。

2 个答案:

答案 0 :(得分:0)

我认为您错过了axis = 1。

df2['average_resp_time' ] = df2.apply(lambda x : x['sum_resp_time'].sum() / x['num_requests'], axis =1)

答案 1 :(得分:0)

这是您的groupby

grouped = tdf.groupby(['app']).agg({'num_requests':'sum', 'sum_resp_time':'sum'})

要创建average_resp_time列,只需执行以下操作:

grouped['average_resp_time'] = grouped['sum_resp_time'] / grouped['num_requests']

    num_requests    sum_resp_time   average_resp_time
app         
A   220     98000   445.454545
B   110     5000    45.454545
C   1120    552000  492.857143
相关问题