计算熊猫分组的频率

红狼

我有一个看起来像这样的数据框:

     a     b     c        result
0    80    50    10000    pass
1    80    50    10000    pass
2    100   50    10000    pass
3    100   50    10000    fail
...
XX   110   70    15000    pass
XX   110   70    15000    pass
XX   110   80    10000    fail
XX   110   80    10000    fail

我想获取数据帧的每个组合(a,b,c)的“通过”频率(%)。例如,上述数据集应导致

     a     b     c        passFreq
0    80    50    10000    1.0
1    100   50    10000    0.5
...
2    110   70    15000    1.0
3    110   80    10000    0.0  

如果我做

df.groupby(['a', 'b', 'c']).describe()

我得到了频率,但它没有按照我想要的方式报告它,而且我不确定如何检索频率并从中创建新的数据集。

有指导吗?

耶斯列尔

crosstab如果需要列的所有值的百分比,请使用result

print (pd.crosstab([df['a'], df['b'], df['c']], df['result'], normalize=0))
result        fail  pass
a   b  c                
80  50 10000   0.0   1.0
100 50 10000   0.5   0.5
110 70 15000   0.0   1.0
    80 10000   1.0   0.0

df2 = (pd.crosstab([df['a'], df['b'], df['c']], 
                  df['result'], normalize=0)
        .reset_index()
        .rename_axis(None, axis=1))
print (df2)
     a   b      c  fail  pass
0   80  50  10000   0.0   1.0
1  100  50  10000   0.5   0.5
2  110  70  15000   0.0   1.0
3  110  80  10000   1.0   0.0

如果只需要pass先将值与新列进行比较,然后进行汇总mean

df1 = (df.assign(new = df['result'].eq('pass'))
         .groupby(['a', 'b', 'c'])['new']
         .mean()
         .reset_index(name='pass'))
print (df1)
     a   b      c  pass
0   80  50  10000   1.0
1  100  50  10000   0.5
2  110  70  15000   1.0
3  110  80  10000   0.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章