Python pandas来计算groupby总和的百分比?

m4pnthwp  于 2023-04-28  发布在  Python
关注(0)|答案(2)|浏览(136)

我想在按不同列分组后计算数据框的特定列的总和的相对百分比。数据框的格式例如:

df = pd.DataFrame({'Company': ['Company1', 'Company2', 'Company3', 'Company1', 'Company3'],
                   'STC Watts': [10.10, 9.6, 13.3, 5.6, 10.12],
                   ...other columns
                     )

此时,我需要按“公司”列进行分组,并获得每个公司的“STC Watts”列的总和,但我还希望获得该公司“STC Watts”总和在整个数据集总和中的相对百分比。我尝试使用此question中的几个解决方案,但无法使其中任何一个工作

3yhwsihp

3yhwsihp1#

您可以对groupby.sum进行后处理,添加一个新列,并将其除以总数(可选乘以100表示百分比,并最终舍入):

out = (
 df.groupby('Company', as_index=False)['STC Watts'].sum()
   .assign(percent=lambda d: d['STC Watts'].div(d['STC Watts'].sum())
                                           .mul(100).round(2)
           )
)

输出:

Company  STC Watts  percent
0  Company1      15.70    32.22
1  Company2       9.60    19.70
2  Company3      23.42    48.07
gdrx4gfi

gdrx4gfi2#

试试这个:

import pandas as pd
df = pd.DataFrame({'Company': ['Company1', 'Company2', 'Company3', 'Company1', 'Company3'],
                   'STC Watts': [10.10, 9.6, 13.3, 5.6, 10.12]})
new_df = df.groupby('Company').sum()
new_df['percent'] = ((new_df['STC Watts'] / new_df['STC Watts'].sum()) * 100).round(2)
new_df

输出将是:

STC Watts  percent
Company                     
Company1      15.70    32.22
Company2       9.60    19.70
Company3      23.42    48.07

相关问题