Вопрос или проблема
страна год пол мера значение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
из группировки.
Пошаговая инструкция
-
Импорт библиотеки Pandas: Если вы ещё не импортировали библиотеку Pandas, начните с этого. Pandas – это мощный инструмент для работы с данными в Python.
import pandas as pd
-
Создание первоначального 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)
-
Группировка и суммирование данных: Далее, используйте метод
groupby
, чтобы сгруппировать данные по выбранным столбцам и применить методsum()
к остальным столбцам с значениями.df_new = df.groupby(['country', 'year', 'measure']).sum().reset_index()
Здесь метод
sum()
автоматически выполнит сложение для всех числовых столбцов, аreset_index()
приведет DataFrame обратно к его исходной форме, добавляя индексы для групп. -
Удаление ненужных колонок: Поскольку в вашем случае есть необходимость исключить колонку
gender
, сделать это можно с помощью методаdrop()
.df_new = df.groupby(['country', 'year', 'measure']).sum().reset_index()
-
Проверка результата: В конце вы можете вывести полученный 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 является мощным инструментом для агрегации данных, особенно когда нужно вычислить суммы или другие статистические показатели для определенных подгрупп. Следуя этой инструкции, вы сможете легко суммировать значения столбцов на основании выбранных категориальных колонок, что значительно упростит анализ и отчетность ваших данных.