Dani
Dani

Reputation: 799

Count specific values in a pandas series

I have a pandas series in python. Is there a function/easy way to construct a series which contains the number of appearances of given values?

For demonstration, suppose I have the following Series: 1, 3, 1, 5, 10. I want to count how many appearances each value has, from the following list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. The series that should return is 2, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1

Upvotes: 2

Views: 204

Answers (3)

anky
anky

Reputation: 75150

With map:

s = pd.Series([1, 3, 1, 5, 10])
inp_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

pd.Series(inp_list).map(s.value_counts()).fillna(0).astype(int).tolist()

Or list comp with get

c = s.value_counts()
[c.get(i,0) for i in inp_list]
#or [*map(lambda x: c.get(x,0),inp_list)]

[2, 0, 1, 0, 1, 0, 0, 0, 0, 1]

Upvotes: 1

Dishin H Goyani
Dishin H Goyani

Reputation: 7723

Use numpy.bincount

import numpy as np
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = pd.Series([1, 3, 1, 5, 10])

out = list(np.bincount(s)[[l]])
out
[2, 0, 1, 0, 1, 0, 0, 0, 0, 1]

Upvotes: 1

BENY
BENY

Reputation: 323396

We do value_counts + reindex

l=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
l1=[1, 3, 1, 5, 10]
pd.Series(l1).value_counts().reindex(l,fill_value=0).tolist()
[2, 0, 1, 0, 1, 0, 0, 0, 0, 1]

Upvotes: 2

Related Questions