The Python Oracle

What is a good way to do countif in Python

This video explains
What is a good way to do countif in Python

--

Become part of the top 3% of the developers by applying to Toptal
https://topt.al/25cXVn

--

Track title: CC O Beethoven - Piano Sonata No 3 in C

--

Chapters
00:00 Question
01:02 Accepted answer (Score 85)
01:33 Answer 2 (Score 17)
01:59 Answer 3 (Score 4)
02:20 Answer 4 (Score 0)
03:37 Thank you

--

Full question
https://stackoverflow.com/questions/2643...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python

#avk47



ACCEPTED ANSWER

Score 90


The iterator based approach is just fine. There are some slight modifications that can emphasize the fact that you are counting:

sum(1 if meets_condition(x) else 0 for x in my_list)
# or 
sum(1 for x in my_list if meets_condition(x))

And as always, if the intent isn't apparent from the code, encapsulate it in descriptively named function:

def count_matching(condition, seq):
    """Returns the amount of items in seq that return true from condition"""
    return sum(1 for item in seq if condition(item))

count_matching(meets_condition, my_list)



ANSWER 2

Score 19


The first one

sum(meets_condition(x) for x in my_list)

looks perfectly readable and pythonic to me.

If you prefer the second approach I'd go for

len(filter(meets_condition, my_list))

Yet another way could be:

map(meets_condition, my_list).count(True)



ANSWER 3

Score 4


countif for a list

#counting if a number or string is in a list
my_list=[1,2,3,2,3,1,1,1,1,1, "dave" , "dave"]
one=sum(1 for item in my_list if item==(1))
two=sum(1 for item in my_list if item==(2))
three=sum(1 for item in my_list if item==(3))
dave=sum(1 for item in my_list if item==("dave"))
print("number of one's in my_list > " , one)
print("number of two's in my_list > " , two)
print("number of three's in my_list > " , three)
print("number of dave's in my_list > " , dave)



ANSWER 4

Score 0


I know the question above is very well taken care of already, but if you are new in the python world and happen to be here because you searched for the simple keyword "Countif python" (and google suggested this page as the most relevant page on its list), the following method is very simple to code and run.

You can simply use a boolean value and as Gordon said, it depends on the fact that True==1;

First, create a boolean series using the column's condition and then add up the values.

series = boolian condition
sum(series)

Example: We'd like to know how many students got (GPA = A) and how many received a mark over 80 in Math.

df = pd.DataFrame({'ID': [1,2,3,4,5],
               'Math':[87,83,95,75,60],
               'GPA': ['A','B','A','B','C']})

Answer:

GPA = df.GPA == 'A'
sum(GPA)
Out: 2

Math_Mark = df.Math > 80
sum(Math_Mark)
Out: 3

P.s: I added this answer because google lists this page as the most relevant page when you search for "countif python". No need to give negative, if most of you think this answer shouldn't be here, I'll remove it.