Count frequency of values in pandas DataFrame column

121,374

Solution 1

You can use value_counts and to_dict:

print df['status'].value_counts()
N    14
S     4
C     2
Name: status, dtype: int64

counts = df['status'].value_counts().to_dict()
print counts
{'S': 4, 'C': 2, 'N': 14}

Solution 2

An alternative one liner using underdog Counter:

In [3]: from collections import Counter

In [4]: dict(Counter(df.status))
Out[4]: {'C': 2, 'N': 14, 'S': 4}

Solution 3

You can try this way.

df.stack().value_counts().to_dict()

Solution 4

Can you convert df into a list?

If so:

a = ['a', 'a', 'a', 'b', 'b', 'c']
c = dict()
for i in set(a):
    c[i] = a.count(i)

Using a dict comprehension:

c = {i: a.count(i) for i in set(a)}

Solution 5

See my response in this thread for a Pandas DataFrame output,

count the frequency that a value occurs in a dataframe column

For dictionary output, you can modify as follows:

def column_list_dict(x):
    column_list_df = []
    for col_name in x.columns:        
        y = col_name, len(x[col_name].unique())
        column_list_df.append(y)
    return dict(column_list_df)
Share:
121,374
Kishan Mehta
Author by

Kishan Mehta

Curious learner. Believe in hard work. Mostly code in Python, sometimes JS.

Updated on July 05, 2022

Comments

  • Kishan Mehta
    Kishan Mehta almost 2 years

    I want to count number of times each values is appearing in dataframe.

    Here is my dataframe - df:

        status
    1     N
    2     N
    3     C
    4     N
    5     S
    6     N
    7     N
    8     S
    9     N
    10    N
    11    N
    12    S
    13    N
    14    C
    15    N
    16    N
    17    N
    18    N
    19    S
    20    N
    

    I want to dictionary of counts:

    ex. counts = {N: 14, C:2, S:4}

    I have tried df['status']['N'] but it gives keyError and also df['status'].value_counts but no use.

  • Say OL
    Say OL over 2 years
    Why do we stack?
  • Say OL
    Say OL over 2 years
    Nice solution - using only pandas