pythonpandasgroup-bycountfrequency

Count the frequency that a value occurs in a dataframe column


I have a dataset

category
cat a
cat b
cat a

I'd like to return something like the following which shows the unique values and their frequencies

category   freq 
cat a       2
cat b       1

Solution

  • Use value_counts() as @DSM commented.

    In [37]:
    df = pd.DataFrame({'a':list('abssbab')})
    df['a'].value_counts()
    
    Out[37]:
    
    b    3
    a    2
    s    2
    dtype: int64
    

    Also groupby and count. Many ways to skin a cat here.

    In [38]:
    df.groupby('a').count()
    
    Out[38]:
    
       a
    a   
    a  2
    b  3
    s  2
    
    [3 rows x 1 columns]
    

    See the online docs.

    If you wanted to add frequency back to the original dataframe use transform to return an aligned index:

    In [41]:
    df['freq'] = df.groupby('a')['a'].transform('count')
    df
    
    Out[41]:
    
       a freq
    0  a    2
    1  b    3
    2  s    2
    3  s    2
    4  b    3
    5  a    2
    6  b    3
    
    [7 rows x 2 columns]