Mark K
Mark K

Reputation: 9348

Pandas GroupBy columns to get 'mode'

Dataset as below and I want to aggregate the by 'Name' and 'Weeks' to get their mode.

I tried two ways but neither worked:

import pandas as pd
from io import StringIO

csvfile = StringIO("""
Name    Weeks   Sales
Amelia  202106  57
Amelia  202105  61
Amelia  202106  59
Amelia  202103  49
Amelia  202105  87
Amelia  202104  95
Elijah  202106  49
Elijah  202105  40
Elijah  202106  57
Elijah  202103  97
Elijah  202105  67
Elijah  202104  89
James   202106  66
James   202105  92
James   202106  57
James   202103  82
James   202105  53
James   202104  71""")

df = pd.read_csv(csvfile, sep = '\t', engine='python')

df['Weeks'] = df['Weeks'].astype(str)

# tried both but neither worked:
mode = df.groupby(['Name', 'Weeks']).agg({'Sales': ['mode']})
# or 
mode = df.groupby(df['Name', 'Weeks'])[['Sales']].mode()

What's the right way?

Upvotes: 1

Views: 95

Answers (1)

Nk03
Nk03

Reputation: 14949

TRY:

from statistics import mode
mode = df.groupby(['Name', 'Weeks'])['Sales'].apply(mode)
Name    Weeks 
Amelia  202103    49
        202104    95
        202105    61
        202106    57
Elijah  202103    97
        202104    89
        202105    40
        202106    49
James   202103    82
        202104    71
        202105    92
        202106    66

Upvotes: 1

Related Questions