基于分组列的条件总和

问题描述 投票:1回答:1

基本上,我想创建一个ERROR RATE列,它取YES中的ERROR的总和,并将它除以NO中的ERROR,但是根据ERROR RATELOCATION过滤DESCRIPTION

df = pd.DataFrame({'ERROR' : ['YES','YES','NO','NO','YES'],
           'LOCATION' : ['London', 'New York', 'Edinburgh', 'Paris', 'Berlin'],
           'DESCRIPTION' : ['Good', 'Bad', 'Good', 'Bad', 'Bad']}) 

我尝试过编写代码:

df.groupby(['DESCRIPTION','LOCATION'])['ERROR'].agg()

但我不确定a)这是否是正确的方法和b)我需要为agg()写什么样的功能

提前致谢

python pandas group-by aggregate
1个回答
2
投票

也许你正在寻找groupby + value_counts + unstack + div

i = df.groupby(['DESCRIPTION' ,'LOCATION']).ERROR.value_counts().unstack(-1)
j = (i.YES / i.NO).to_frame('ERROR_RATE')

j

                       ERROR_RATE
DESCRIPTION LOCATION             
Bad         Berlin            ...
            New York          ...
            Paris             ...
Good        Edinburgh         ...
            London            ...

如果对于特定组没有YESNO的计数,那么结果列将在最终结果中具有NaN用于那些条目。


如果你正在使用agg,你需要一个3路组合。

i = df.groupby(['DESCRIPTION','LOCATION','ERROR']).ERROR.count().unstack()
j = (i.YES / i.NO).to_frame('ERROR_RATE')

j
                       ERROR_RATE
DESCRIPTION LOCATION             
Bad         Berlin            ...
            New York          ...
            Paris             ...
Good        Edinburgh         ...
            London            ...

countagg('count')相同。

© www.soinside.com 2019 - 2024. All rights reserved.