<p>首先需要按两个变量(<code>Municipality</code>和<code>PartyName</code>)分组,然后按结果聚合数据帧的第一个索引(<code>level=0</code>)分组,然后计算每个组(<code>.apply(...)</code>)上的百分比</p>
<pre class="lang-py prettyprint-override"><code>from io import StringIO
import pandas as pd
s = """Municipality PartyName TotalValidVotes
BUF - Buffalo City AFRICAN CHRISTIAN DEMOCRATIC PARTY 2519
BUF - Buffalo City AFRICAN INDEPENDENT CONGRESS 15600
BUF - Buffalo City AFRICAN NATIONAL CONGRESS 268052
BUF - Buffalo City CONGRESS OF THE PEOPLE 3913
BUF - Buffalo City DEMOCRATIC ALLIANCE 106790
"""
df = pd.read_csv(StringIO(s), sep="\s\s+", engine="python")
df = (
df.groupby(["Municipality", "PartyName"])
.agg({"TotalValidVotes": "sum"})
.groupby(level=0)
.apply(lambda g: 100 * g / g.sum())
.reset_index()
)
</code></pre>
<p>产生:</p>
<pre class="lang-none prettyprint-override"><code> Municipality PartyName TotalValidVotes
0 BUF - Buffalo City AFRICAN CHRISTIAN DEMOCRATIC PARTY 0.634710
1 BUF - Buffalo City AFRICAN INDEPENDENT CONGRESS 3.930719
2 BUF - Buffalo City AFRICAN NATIONAL CONGRESS 67.540832
3 BUF - Buffalo City CONGRESS OF THE PEOPLE 0.985955
4 BUF - Buffalo City DEMOCRATIC ALLIANCE 26.907784
</code></pre>
<p>此代码段应该可以工作,而无需创建中间数据帧</p>