我的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
答案 0 :(得分: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
根据您的业务案例,像您正在做的那样,将“百分比”列用于将来的计算可能很有价值。因此,将此类列作为数据集的一部分可能是合理的。
答案 1 :(得分:1)
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