基本上,我想创建一个ERROR RATE
列,它取YES
中的ERROR
的总和,并将它除以NO
中的ERROR
,但是根据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()
写什么样的功能
提前致谢
也许你正在寻找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
,你需要一个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')
相同。