使用groupby和sum()进行分组 - 然后计算百分比

时间:2018-03-20 08:46:36

标签: python python-2.7 pandas-groupby

我希望找到一种简单的方法来计算每个组中每个子类别的百分比。这是一个例子:

df = pd.DataFrame({'key': ['A', 'B', 'C', 'A', 'B', 'C'],
                   'data1': range(6),
                   'data2': ['A1', 'B1', 'C1', 'A2', 'B2', 'C2']},
                   columns = ['key', 'data1', 'data2'])

df.groupby(['key','data2'])['data1'].sum()  

我想要做的是创建一个额外的列,显示相应类别中每个子类别(即A1等)的百分比(即A等)。例如,我想知道A1 / sum(A1 + A2)到C2 / sum(C1 + C2)的百分比。

最简单的方法是什么?

1 个答案:

答案 0 :(得分:0)

请进一步澄清A1 /(A1 + A2)的百分比是什么意思,“data2”列是整数类型吗?

好的,我认为这应该适合你:

sums = df.groupby(['key', 'data2']).agg({'data1': 'sum'})

percentages = sums.groupby(level=0).apply(lambda x: 100 * x / float(x.sum()))