用agg对Pandas组中列的和进行求和和和除法

2024-06-28 19:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着做熊猫分组和聚合。 我有两列之和,我还需要两列之和的除法。你知道吗

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()
        } 
    )

)

如何让“平均响应时间”工作,目前已被注释掉。 我现在的平均计算出错了。你知道吗


Tags: lambdaappdataframetime时间requestsrespnum
2条回答

我想你错过了轴=1。你知道吗

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

这是你的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

相关问题 更多 >