Группировка по пользовательской функции агрегирования python - PullRequest
0 голосов
/ 02 декабря 2018

После выполнения группировки по двум столбцам (id и категория) с использованием функции среднего агрегирования по столбцу (col3) у меня есть что-то вроде этого:

                              col3
id            category        mean
345              A             12
                 B              2
                 C              3
                 D              4
                Total          21

Что я хотел бы сделать, это добавитьновый столбец под названием процент, в котором я рассчитываю процент каждой категории по категории Total.Это должно быть сделано отдельно для каждого id.Результат должен выглядеть примерно так:

                              col3
id            category        mean    percentage
345              A             12        0.57
                 B              2        0.09
                 C              3        0.14
                 D              4        0.19
                Total          21         1

Очевидно, я хочу сделать это для каждого идентификатора, то есть для первого столбца, в котором я выполнил групповую работу.Любое предложение о том, как это сделать?

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Используя get_level_values, отфильтруйте ваш df, затем мы используем div

s=df[df.index.get_level_values(level=1)!='Total'].sum(level=0)
df['percentage']=df.div(s,level=0,axis=1)
df
Out[422]: 
              mean  percentage
id  category                  
345 A           12    0.571429
    B            2    0.095238
    C            3    0.142857
    D            4    0.190476
    Total       21    1.000000
0 голосов
/ 02 декабря 2018

Вот мое предложение:

df['mean'] = df['mean'] / df['mean'].sum()

...