首页 > 解决方案 > 基于另一列的每个值的列值总和并将其除以总计

问题描述

今天,我再次在 python 和数据分析方面苦苦挣扎。

我有一个看起来像这样的数据框:

    name         totdmgdealt
0   Warwick      96980.0
1   Nami         25995.0
2   Draven       171568.0
3   Fiora        113721.0
4   Viktor       185302.0
5   Skarner      148791.0
6   Galio        130692.0
7   Ahri         145731.0
8   Jinx         182680.0
9   VelKoz       85785.0
10  Ziggs        46790.0
11  Cassiopeia   62444.0
12  Yasuo        117896.0
13  Warwick      129156.0
14  Evelynn      179252.0
15  Caitlyn      163342.0
16  Wukong       122919.0
17  Syndra       146754.0
18  Karma        35766.0
19  Warwick      117790.0
20  Draven       74879.0
21  Janna        11242.0
22  Lux          66424.0
23  Amumu        87826.0
24  Vayne        76085.0
25  Ahri         93334.0
..
..
..

这是一个数据框,其中包括一个冠军在一场比赛中的总伤害。现在我想对这些信息进行分组,这样我就可以看到总体上哪个英雄造成的伤害最大。我尝试了 groupby('name') 但它根本不起作用。我已经完成了一些关于 groupby 和 summing values 的线程,但我没有解决我的具体问题。

每个英雄造成的伤害也应该显示为总伤害的百分比。

我正在寻找这样的东西作为输出:

    name     totdmgdealt  percentage
0   Warwick  2378798098     2.1  %
1   Nami     2837491074     2.3  %
2   Draven   1231451224     ..
3   Fiora    1287301724     ..
4   Viktor   1239808504     ..
5   Skarner  1487911234     ..
6   Galio    1306921234     ..

标签: pythonpandasjupyter-notebookdata-analysis

解决方案


我们可以对名称进行分组并得到sum然后我们将每个值除以总数.div并乘以 100,.mul最后将其四舍五入到小数点后.round

total = df['totdmgdealt'].sum()

summed = df.groupby('name', sort=False)['totdmgdealt'].sum().reset_index()

summed['percentage'] = summed.groupby('name', sort=False)['totdmgdealt']\
                             .sum()\
                             .div(total)\
                             .mul(100)\
                             .round(1).values
          name  totdmgdealt  percentage
0      Warwick     343926.0        12.2
1         Nami      25995.0         0.9
2       Draven     246447.0         8.7
3        Fiora     113721.0         4.0
4       Viktor     185302.0         6.6
5      Skarner     148791.0         5.3
6        Galio     130692.0         4.6
7         Ahri     239065.0         8.5
8         Jinx     182680.0         6.5
9       VelKoz      85785.0         3.0
10       Ziggs      46790.0         1.7
11  Cassiopeia      62444.0         2.2
12       Yasuo     117896.0         4.2
13     Evelynn     179252.0         6.4
14     Caitlyn     163342.0         5.8
15      Wukong     122919.0         4.4
16      Syndra     146754.0         5.2
17       Karma      35766.0         1.3
18       Janna      11242.0         0.4
19         Lux      66424.0         2.4
20       Amumu      87826.0         3.1
21       Vayne      76085.0         2.7

推荐阅读