Pandas - групповой процент от общей суммы - PullRequest
2 голосов
/ 30 января 2020

У меня есть df, который я хотел бы сгруппировать по двум столбцам. То, что я хотел бы отобразить, это процент от суммы каждого элемента на уровне = 0 (т.е. сумма 'a' и сумма 'b' в приведенном ниже примере) для каждого элемента на уровне = 1 (то есть 'c ',' d ',' e 'в примере).

Пример:

У меня есть следующий фрейм данных

df = pd.DataFrame({'col1':['a','a','a','a','a','b','b','b','b','b'], 'col2': ['c','c','d','d','e','c','c','d','d','e'],'col3':[2,2,2,2,2,2,2,2,2,2]})

col1 col2  col3
0    a    c     2
1    a    c     2
2    a    d     2
3    a    d     2
4    a    e     2
5    b    c     2
6    b    c     2
7    b    d     2
8    b    d     2
9    b    e     2

И я хотел бы получить это:

col1  col2
a     c       0.4
      d       0.4
      e       0.2
b     c       0.4
      d       0.4
      e       0.2

1 Ответ

3 голосов
/ 30 января 2020

Сначала агрегируйте sum по обоим столбцам, а затем делите на DataFrame.div sum на первый уровень MultiIndex:

df1 = df.groupby(['col1','col2']).sum()
df1 = df1.div(df1.sum(level=0), level=0)
print (df1)
           col3
col1 col2      
a    c      0.4
     d      0.4
     e      0.2
b    c      0.4
     d      0.4
     e      0.2
...