2014-01-08 7 views
27

Существуют ли в пандах отдельные функции для выполнения эквивалентов SUMIF, которые суммируются по определенному условию и COUNTIF, который подсчитывает значения конкретных условий из Excel?Pandon Pandas подсчет и суммирование конкретных условий

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

, например, для sumif я могу использовать (df.map(lambda x: condition), or df.size()) затем использовать .sum()

и для countif я могу использовать (groupby functions и искать мой ответ или используйте фильтр и .count())

Есть ли простой одноэтапный процесс для выполнения этих функций, когда вы вводите условие и фрейм данных, и получаете суммы или подсчитываете результаты?

ответ

32

Вы можете сначала сделать условный выбор и подвести итоги выбора с помощью функции sum.

>> df = pd.DataFrame({'a': [1, 2, 3]}) 
>> df[df.a > 1].sum() 
a 5 
dtype: int64 

Имея более чем одно условие:

>> df[(df.a > 1) & (df.a < 3)].sum() 
a 2 
dtype: int64 
+2

Что бы вы сделали, если у вас есть два или более разных столбца, и вы хотите более одного условия? – user3084006

+0

Просто измените один из выбранных столбцов во втором примере на другое имя столбца. –

+1

@JimmyC: Ваш ответ содержит код для SUMIF, но не COUNTIF, не так ли? – stackoverflowuser2010

16

Вы не говоря уже о возможности фантазии индексации dataframes, например .:

>>> df = pd.DataFrame({"class":[1,1,1,2,2], "value":[1,2,3,4,5]}) 
>>> df[df["class"]==1].sum() 
class 3 
value 6 
dtype: int64 
>>> df[df["class"]==1].sum()["value"] 
6 
>>> df[df["class"]==1].count()["value"] 
3 

Вы могли бы заменить df["class"]==1 другим условием.

+0

У меня есть это в моем коде тоже, но что, если у вас есть несколько условий, как если бы я хотел 'DF [DF [«класс»] == 1 ] .count() ["value"] 'и' df [df ["value"] == 2] .count() ["class"] ' – user3084006

+1

Комбинация более чем одного условия была предложена Джимми C, поэтому я не повторится в моем посте. Есть ли что-то еще для вас? –

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