我有一个看起来像这样的数据框:
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] 删除。
我来说两句