我正在尝试做大熊猫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”工作,目前已被注释掉。 我当前的平均计算会引发错误。
答案 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