pandasaggregatemode

mode returns Exception: Must produce aggregated value


For this DataFrame:

   values  ii
0     3.0   4
1     0.0   1
2     3.0   8
3     2.0   5
4     2.0   1
5     3.0   5
6     2.0   4
7     1.0   8
8     0.0   5
9     1.0   1

This line returns the error "Must produce aggregated values"

bii2=df.groupby(['ii'])['values'].agg(pd.Series.mode)

While this line works

bii3=df.groupby('ii')['values'].agg(lambda x: pd.Series.mode(x)[0])

Could you explain why is that?


Solution

  • Problem is mode return sometimes 2 or more values, check solution with GroupBy.apply:

    bii2=df.groupby(['ii'])['values'].apply(pd.Series.mode)
    print (bii2)
    ii   
    1   0    0.0
        1    1.0
        2    2.0
    4   0    2.0
        1    3.0
    5   0    0.0
        1    2.0
        2    3.0
    8   0    1.0
        1    3.0
    Name: values, dtype: float64
    

    And pandas agg need scalar in output, so return error. So if select first value it working nice

    bii3=df.groupby('ii')['values'].agg(lambda x: pd.Series.mode(x).iat[0])
    print (bii3)
    ii
    1    0.0
    4    2.0
    5    0.0
    8    1.0
    Name: values, dtype: float64