Python 基于分组列的条件和

Python 基于分组列的条件和,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,基本上,我想创建一个列错误率,它取错误中是的总和,然后除以错误中的否,但要按照位置每个描述对错误率进行过滤 df = pd.DataFrame({'ERROR' : ['YES','YES','NO','NO','YES'], 'LOCATION' : ['London', 'New York', 'Edinburgh', 'Paris', 'Berlin'], 'DESCRIPTION' : ['Good', 'Bad', 'Good', 'Bad'

基本上,我想创建一个列
错误率
,它取
错误
的总和,然后除以
错误
中的
,但要按照
位置
每个
描述
错误率进行过滤

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\u计数
+
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            ...
如果特定组的
YES
no
没有计数,则最终结果中的这些条目的结果列将具有
NaN


如果您使用的是
agg
,则需要一个3路groupby

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')
相同