Как создать DataFrame, который будет суммировать столбцы на основе столбца группировки?

Вопрос или проблема

страна   год    пол    мера               значение0 ... значение12
 A         2000    1     вакцинирован_в_месяце   2      ... 1
 B         2000    1     вакцинирован_в_месяце   13     ... 12
 A         2000    0     вакцинирован_в_месяце   4      ... 3
 A         2000    9     вакцинирован_в_месяце   5      ... 4
 B         2000    0     гулял_в_месяце       3      ... 13
 C         2001    1     вакцинирован_в_месяце   6      ... 5
 C         2001    0     вакцинирован_в_месяце   3      ... 2

Я хочу удалить колонку с полом и сложить все значения на основе предыдущих категориальных колонок.

Я пробовал

df_new = df.groupby(['страна', 'год', 'пол', 'мера'])['значение0', ... 'значение12'].apply(lambda x : x.astype(float).sum())

Однако df_new всё еще сохраняет колонку с полом. Я пытаюсь получить следующий результат:

страна   год       мера               значение0      ... значение12
 A         2000       вакцинирован_в_месяце   11 (=2+4+5) ... 8 (=1+3+4)
 B         2000       вакцинирован_в_месяце   13          ... 12
 B         2000       гулял_в_месяце       3           ... 13
 C         2001       вакцинирован_в_месяце   9 (=6+3)    ... 7 (=5+2)
 C         2001       вакцинирован_в_месяце   3           ... 2

Этот вопрос более уместен на Stackoverflow, так как это больше похоже на вопрос о программировании.

Тем не менее, я думаю, вы почти справились. Просто уберите пол из вашей группировки:

df_new = df.groupby(['страна', 'год', 'мера'])['значение0', ... 'значение12'].apply(lambda x : x.astype(float).sum())

Вы можете попробовать это:

df_new = df.groupby(['страна', 'год', 'мера'])['значение0', '...', 'значение12'].sum()
print(df_new)

Ответ или решение

Чтобы создать новый DataFrame (df_new), который суммирует значения столбцов на основе группировки по колонкам, вы можете использовать метод groupby из библиотеки Pandas. В вашем случае вам нужно сгруппировать данные по столбцам country, year и measure, исключив колонку gender из группировки.

Пошаговая инструкция

  1. Импорт библиотеки Pandas: Если вы ещё не импортировали библиотеку Pandas, начните с этого. Pandas – это мощный инструмент для работы с данными в Python.

    import pandas as pd
  2. Создание первоначального DataFrame: Предположим, что ваши данные уже находятся в DataFrame df. Если данные ещё не загружены, вот пример кода, чтобы создать подобный DataFrame:

    data = {
       'country': ['A', 'B', 'A', 'A', 'B', 'C', 'C'],
       'year': [2000, 2000, 2000, 2000, 2000, 2001, 2001],
       'gender': [1, 1, 0, 9, 0, 1, 0],
       'measure': ['vaccinated_at_month', 'vaccinated_at_month', 'vaccinated_at_month', 'vaccinated_at_month', 'walked_at_month', 'vaccinated_at_month', 'vaccinated_at_month'],
       'value0': [2, 13, 4, 5, 3, 6, 3],
       'value1': [1, 12, 3, 4, 13, 5, 2],
       # Добавьте другие значения value2 ... value12, если необходимо
    }
    df = pd.DataFrame(data)
  3. Группировка и суммирование данных: Далее, используйте метод groupby, чтобы сгруппировать данные по выбранным столбцам и применить метод sum() к остальным столбцам с значениями.

    df_new = df.groupby(['country', 'year', 'measure']).sum().reset_index()

    Здесь метод sum() автоматически выполнит сложение для всех числовых столбцов, а reset_index() приведет DataFrame обратно к его исходной форме, добавляя индексы для групп.

  4. Удаление ненужных колонок: Поскольку в вашем случае есть необходимость исключить колонку gender, сделать это можно с помощью метода drop().

    df_new = df.groupby(['country', 'year', 'measure']).sum().reset_index()
  5. Проверка результата: В конце вы можете вывести полученный DataFrame df_new, чтобы проверить корректность выполнения операций суммирования.

    print(df_new)

Ожидаемый результат

После выполнения этих шагов вы должны получить DataFrame df_new, который будет выглядеть следующим образом:

  country  year                measure  value0  value1
0      A  2000  vaccinated_at_month      11      8
1      B  2000  vaccinated_at_month      13     12
2      B  2000      walked_at_month       3     13
3      C  2001  vaccinated_at_month       9      7

В этом результирующем DataFrame колонка gender будет исключена, а все значения других колонок будут суммированы по группам.

Заключение

Метод groupby в Pandas является мощным инструментом для агрегации данных, особенно когда нужно вычислить суммы или другие статистические показатели для определенных подгрупп. Следуя этой инструкции, вы сможете легко суммировать значения столбцов на основании выбранных категориальных колонок, что значительно упростит анализ и отчетность ваших данных.

Оцените материал
Добавить комментарий

Капча загружается...