基于分组列的条件总和
Conditional sums based on grouped columns
基本上,我想创建一个列 ERROR RATE
,它用 ERROR
中 YES
的总和除以 NO
在 ERROR
中,但要根据 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 ...
如果特定组的 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')
.
基本上,我想创建一个列 ERROR RATE
,它用 ERROR
中 YES
的总和除以 NO
在 ERROR
中,但要根据 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 ...
如果特定组的 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')
.