擅长:python、mysql、java
<p>这里有一个解决方案。您可以首先执行groupby以获得最低级别的聚合,然后使用groupby转换将这些值除以状态总数</p>
<pre><code>agg = df.groupby(['Fund','State'],as_index=False)['Compensation'].sum()
agg['percentage'] = (agg['Compensation'] / agg.groupby('State')['Compensation'].transform(sum)) * 100
agg.to_dict()
{'Fund': {0: '1000', 1: '2000', 2: '3000', 3: '4000'},
'State': {0: 'AL', 1: 'FL', 2: 'AL', 3: 'NC'},
'Compensation': {0: 4500, 1: 3250, 2: 7200, 3: 4450},
'percentage': {0: 38.46153846153847,
1: 100.0,
2: 61.53846153846154,
3: 100.0}}
</code></pre>