Reputation: 9348
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
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