Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas counting and summing specific conditions

Tags:

python

pandas

sum

Are there single functions in pandas to perform the equivalents of SUMIF, which sums over a specific condition and COUNTIF, which counts values of specific conditions from Excel?

I know that there are many multiple step functions that can be used for

for example for sumif I can use (df.map(lambda x: condition), or df.size()) then use .sum()

and for countif I can use (groupby functions and look for my answer or use a filter and the .count())

Is there simple one step process to do these functions where you enter the condition and the data frame and you get the sum or counted results?

like image 227
user3084006 Avatar asked Jan 08 '14 12:01

user3084006


People also ask

Is there a Countif function in pandas?

Pandas DataFrame count() Method The count() method counts the number of not empty values for each row, or column if you specify the axis parameter as axis='columns' , and returns a Series object with the result for each row (or column).


2 Answers

You can first make a conditional selection, and sum up the results of the selection using the sum function.

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

Having more than one condition:

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

If you want to do COUNTIF, just replace sum() with count()

like image 52
Jimmy C Avatar answered Sep 19 '22 02:09

Jimmy C


You didn't mention the fancy indexing capabilities of dataframes, e.g.:

>>> 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 

You could replace df["class"]==1by another condition.

like image 39
Thorsten Kranz Avatar answered Sep 18 '22 02:09

Thorsten Kranz