【问题标题】:get the percentage of a grouped values based on another column pands python获取基于另一列pandas python的分组值的百分比
【发布时间】:2020-11-23 23:14:57
【问题描述】:

我的 pandas_df 中有两列。类别和金额。我的数据如下所示:

category          amount
home              20
home              10
fashion           20
fashion           10
celebrity         30
celebrity         40

我想对类别列进行分组并获取每个类别的总和。我还需要知道每个类别的百分比。

预期输出: home 30 - 23% etc

我的代码:

dict(df.groupby(['category'])['amount'].sum().sort_values(ascending=False))

输出: home 30 fashion 30 celebrity 70

【问题讨论】:

    标签: python pandas group-by sum percentage


    【解决方案1】:

    我会先创建一个“百分比”列:

    df['percent'] = df['amount'] / sum(df['amount'])
    

    然后,您可以按类别分组并获得所需的输出,四舍五入到小数点后两位:

    df.groupby(['category']).sum().round(2)
    

    输出将是:

              amount    percent
    category
        
    celebrity   70          0.54
    fashion     30          0.23
    home        30          0.23
    

    根据您的业务案例,将“百分比”列作为您正在执行的计算可能很有价值。因此,将此类列作为数据集的一部分包含在内可能是合理的。

    【讨论】:

    • 谢谢。虽然它没有给我正确的百分比。如果总数是 70+30+30 = 130,那么 70(名人)就是 53%...
    • 它显示 54% 因为我包含了 .round(2) 方法。如果你不像我那样对结果进行四舍五入,你会得到更准确的结果 53%,后跟多个小数位。
    【解决方案2】:

    groupby,聚合总和并计算结果总和的百分比。

     g=df.groupby('category').agg(Sum=('amount','sum')).reset_index()#Calculate sum
    
    g.assign(per=(g.Sum/(g.Sum.sum())*100).astype(int))#Calc the Percentage
    
        category  Sum  per
    0  celebrity   70   53
    1    fashion   30   23
    2       home   30   23
    

    【讨论】:

    • 谢谢。我确实尝试了你的代码,看起来“g”没有定义:/
    • 这有帮助吗?
    猜你喜欢
    • 2017-02-24
    • 2021-09-05
    • 2017-10-28
    • 2020-12-09
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多