<p>您可以使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html" rel="nofollow noreferrer">^{<cd1>}</a>并使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.SeriesGroupBy.value_counts.html" rel="nofollow noreferrer">^{<cd2>}</a>除以<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.count.html" rel="nofollow noreferrer">^{<cd3>}</a>,现在使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.unstack.html" rel="nofollow noreferrer">^{<cd4>}</a>,现在使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html" rel="nofollow noreferrer">^{<cd5>}</a>合并它们,参数设置为<code>left</code></p>
<pre><code>g = df.groupby('jobid')['cluster']
d = (g.value_counts().div(g.count())
.mul(100).unstack(fill_value=0)
.add_prefix('Cluster')
)
df.merge(d, how='left', left_on='jobid', right_index=True)
jobid memberid cluster Clusterbronze Clustergold Clustersilver
0 100 1 bronze 33.333333 33.333333 33.333333
1 101 2 silver 0.000000 0.000000 100.000000
2 103 3 gold 0.000000 100.000000 0.000000
3 104 3 gold 0.000000 100.000000 0.000000
4 100 3 gold 33.333333 33.333333 33.333333
5 100 2 silver 33.333333 33.333333 33.333333
6 101 1 silver 0.000000 0.000000 100.000000
</code></pre>