Разгруппировка 1 столбца в несколько

Коллеги, всех приветствую! Имеется следующая задача: у меня есть DataFrame, который содержит столбец критерий, нем есть множество других категорий, мне нужно их разгруппировать.

df_3['Критерий'].unique()
array(['views', 'visitors', 'gender', 'age', 'gender_age', 'members',
   'reach_subscribers'], dtype=object)

Также прикрепляю фрагмент датайрема:

    Дата        Критерий Парам. №1  Парам. №2   Значение
0   26.12.2023  views    NaN        NaN     201
1   26.12.2023  visitors NaN        NaN     139
2   26.12.2023  gender   Ж          NaN     95
3   26.12.2023  gender   М          NaN     33
4   26.12.2023  age     1-18        NaN     2
5   26.12.2023  age     18-21       NaN     5
6   26.12.2023  age     21-24       NaN     14
7   26.12.2023  age     24-27       NaN     8
8   26.12.2023  age     27-30       NaN     14
9   26.12.2023  age     30-35       NaN     29
10  26.12.2023  age     35-45       NaN     36
11  26.12.2023  age     45+         NaN     17
12  26.12.2023  gender_age  Ж       1-18    2
13  26.12.2023  gender_age  Ж       18-21   3
14  26.12.2023  gender_age  Ж       21-24   9
15  26.12.2023  gender_age  Ж       24-27   6
16  26.12.2023  gender_age  Ж       27-30   12
17  26.12.2023  gender_age  Ж       30-35   20
18  26.12.2023  gender_age  Ж       35-45   27
19  26.12.2023  gender_age  Ж       45+     14
20  26.12.2023  gender_age  М       18-21   2
21  26.12.2023  gender_age  М       21-24   5
22  26.12.2023  gender_age  М       24-27   2
23  26.12.2023  gender_age  М       27-30   2
24  26.12.2023  gender_age  М       30-35   9
25  26.12.2023  gender_age  М       35-45   9
26  26.12.2023  gender_age  М       45+     3
60  26.12.2023  members         Новые участники     NaN     7
61  25.12.2023  views           NaN     NaN     1375
62  25.12.2023  visitors        NaN     NaN     765
63  25.12.2023  gender      Ж       NaN     521
64  25.12.2023  gender      М       NaN     180

Мне нужно разгруппировать критерии по имени, например: age, views, visitors и т.д по всем критериям, и также сделать их частью DataFrame с их значением.

Пытался сделать с помощью такой команды:

#df_3.groupby('Критерий', as_index =False).aggregate({'Значение' : 'sum'})

Получилось не то:

Критерий    Значение
0   age     24012
1   gender  24543
2   gender_age  24012
3   members     2958
4   reach_subscribers   287952
5   views   45416
6   visitors    25892

Результат, который я хочу видеть:

Дата        Критерий    Парaметр Значение
26.12.2023   gender-age     Ж,1-18      5 
26.12.2023   gender-age     М,1-18     7
26.12.2023   gender-age     Ж,18-21   11
26.12.2023   gender-age     М,18-21    13
26.12.2023   views            -     1000

Ответы (2 шт):

Автор решения: Alexey Trukhanov

Если Вы хотите в каждую строку исходного датафрейма добавить искомую сумму, то тогда надо использовать связку .groupby() - .transform():

df_3['total_sum'] = df_3.groupby('Критерий')['Значение'].transform('sum')
→ Ссылка
Автор решения: strawdog

Не уверен, что правильно понял вопрос, но вы вполне можете сделать группировку по нескольким столбцам:

res = df.groupby(["Критерий","Парам. №1", "Парам. №2"], dropna=False, as_index=False)["Значение"].sum().fillna("-")
res['Параметр'] = res[['Парам. №1', 'Парам. №2']].agg(', '.join, axis=1)
res = res[["Критерий", "Параметр", "Значение"]]

для приведенного в вопросе примера результат будет:

      Критерий            Параметр  Значение
0          age             1-18, -       2.0
1          age            18-21, -       5.0
2          age            21-24, -      14.0
3          age            24-27, -       8.0
4          age            27-30, -      14.0
5          age            30-35, -      29.0
6          age            35-45, -      36.0
7          age              45+, -      17.0
8       gender                Ж, -     616.0
9       gender                М, -     213.0
10  gender_age             Ж, 1-18       2.0
11  gender_age            Ж, 18-21       3.0
12  gender_age            Ж, 21-24       9.0
13  gender_age            Ж, 24-27       6.0
14  gender_age            Ж, 27-30      12.0
15  gender_age            Ж, 30-35      20.0
16  gender_age            Ж, 35-45      27.0
17  gender_age              Ж, 45+      14.0
18  gender_age            М, 18-21       2.0
19  gender_age            М, 21-24       5.0
20  gender_age            М, 24-27       2.0
21  gender_age            М, 27-30       2.0
22  gender_age            М, 30-35       9.0
23  gender_age            М, 35-45       9.0
24  gender_age              М, 45+       3.0
25     members  Новые участники, -       7.0
26       views                -, -    1576.0
27    visitors                -, -     904.0
→ Ссылка