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 be able to return something like (showing unique values and frequency)

    category | freq |
    cat a       2
    cat b       1

Use groupby and count:

    In [37]:
    df = pd.DataFrame({'a':list('abssbab')})
    df.groupby('a').count()

    Out[37]:

       a
    a   
    a  2
    b  3
    s  2

    [3 rows x 1 columns]

See the online docs: http://pandas.pydata.org/pandas-docs/stable/groupby.html

Also value_counts() as @DSM has commented, many ways to skin a cat here

    In [38]:
    df['a'].value_counts()

    Out[38]:

    b    3
    a    2
    s    2
    dtype: int64

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]

From: stackoverflow.com/q/22391433

Back to homepage or read more recommendations: