我有一个看起来像这样的数据框:
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()
我获得了频率,但是它没有按照我想要的方式报告频率,而且我不确定如何从中获取频率并创建新的数据集。
有指导吗?
答案 0 :(得分:2)
如果需要百分比result
的所有值,请使用crosstab
:
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
答案 1 :(得分:0)
async function actions(){
await UIkit.notification({message: 'Notification message'});
window.location.href='https://chatsales.nl/pakketten/doe-het-zelf?add-to-cart=420';
}
答案 2 :(得分:0)
您需要选择列pass
,然后应用.mean()
和.reset_index(drop=True)
来重置索引:
df.groupby(['a', 'b', 'c'])['result'].mean().reset_index(drop=True)
如果您需要.describe
,也可以这样做