2015-01-30 1 views
25

Предположим, у меня есть столбец так:Как суммировать значения в столбце, которые соответствуют заданному условию с использованием pandas?

a b 
1 5 
1 7 
2 3 
1 3 
2 5 

Я хочу суммировать значения b где a = 1, например. Это даст мне 5 + 7 + 3 = 15.

Как это сделать в пандах?

+2

использование группы в пандах для выполнения этой задачи –

ответ

27

Общепринято использовать булевское индексирование для такого рода задач. С помощью этого метода вы узнаете, где столбец a равен 1, а затем суммируют соответствующие строки столбца b. Вы можете использовать loc обрабатывать индексацию:

>>> df.loc[df['a'] == 1, 'b'].sum() 
15 

Альтернативный подход заключается в использовании groupby разделить dataframe на части в соответствии со значением в столбце a. Вы можете суммировать каждую часть и вытащить значение, что 1 добавляются до:

>>> df.groupby('a')['b'].sum()[1] 
15 

groupby подхода гораздо медленнее, чем при использовании булевой индексации, но полезно, если вы хотите проверить суммы для других значений в столбце a.

+0

Что такое '.b'? Как вы индексируете столбцы? – adijo

+0

Вы можете получить доступ к столбцу 'a' DataFrame, написав' df ['a'] 'или' df.a'. Второй вариант удобен, но не работает, если у вас есть имя столбца с несколькими словами типа «идентификатор лица» или если имя столбца совпадает с методом DataFrame, например «где» или «сумма». –

+0

Хорошо спасибо, а также как преобразовать все значения в столбце в 'int', что позволяет мне их суммировать? Я использовал 'map' для преобразования всех из них в' ints', но я думаю, что в pandas может быть встроенная функция, чтобы сделать это более эффективно. – adijo

Смежные вопросы