<p>如果需要使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.crosstab.html" rel="nofollow noreferrer">^{<cd1>}</a>列<code>result</code>的所有值的百分比,请使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.crosstab.html" rel="nofollow noreferrer">^{<cd1>}</a>:</p>
<pre><code>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
</code></pre>
<hr/>
<pre><code>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
</code></pre>
<p>如果只需要<code>pass</code>首先将值与新列进行比较,然后聚合<code>mean</code>:</p>
<pre><code>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
</code></pre>