基于分组列的条件总和

Conditional sums based on grouped columns

基本上,我想创建一个列 ERROR RATE,它用 ERRORYES 的总和除以 NOERROR 中,但要根据 LOCATION 根据 DESCRIPTION.

过滤 ERROR RATE
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()

编写什么样的函数

提前致谢

也许您正在寻找 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            ...

count 等同于 agg('count').