基本上,我想创建一个列ERROR RATE
,其中YES
位于ERROR
中,并将其除以NO
中的ERROR
。 {1}},但要ERROR RATE
按LOCATION
每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()
提前致谢
答案 0 :(得分: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 ...
如果特定组的YES
或NO
没有计数,则结果列将为最终结果中的这些条目设置NaN
。
如果您正在使用agg
,则需要一个三向分组。
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')
相同。