Ответ 1
Основная идея здесь состоит в том, чтобы выбрать данные, которые вы хотите суммировать, а затем суммировать их. Этот выбор данных может быть сделан несколькими различными способами, некоторые из которых показаны ниже.
Логическое индексирование
Возможно, наиболее распространенным способом выбора значений является использование логического индексирования.
С помощью этого метода вы узнаете, где столбец "a" равен 1
а затем суммируете соответствующие строки столбца "b". Вы можете использовать loc
для обработки индексации строк и столбцов:
>>> df.loc[df['a'] == 1, 'b'].sum()
15
Логическое индексирование может быть расширено на другие столбцы. Например, если df
также содержит столбец "c" и мы хотим суммировать строки в "b", где "a" было 1, а "c" было 2, мы написали бы:
df.loc[(df['a'] == 1) & (df['c'] == 2), 'b'].sum()
запрос
Другой способ выбора данных - использовать query
для фильтрации интересующих вас строк, выбрать столбец "b" и затем суммировать:
>>> df.query("a == 1")['b'].sum()
15
Опять же, метод может быть расширен, чтобы сделать более сложный выбор данных:
df.query("a == 1 and c == 2")['b'].sum()
Обратите внимание, что это немного более кратко, чем метод булевой индексации.
Группа по
Альтернативный подход заключается в использовании groupby
для разделения DataFrame на части в соответствии со значением в столбце "a". Затем вы можете суммировать каждую часть и извлечь значение, к которому прибавили 1 с:
>>> df.groupby('a')['b'].sum()[1]
15
Этот подход, вероятно, будет медленнее, чем использование логического индексирования, но он полезен, если вы хотите проверить суммы для других значений в столбце a
:
>>> df.groupby('a')['b'].sum()
a
1 15
2 8