imprimiendo el top 2 de los valores frecuentes de la columna de destino

Tengo tres columnas como las que se muestran a continuación, y trato de devolver el conteo más alto de top1 y top2 de la tercera columna. Quiero que esta salida se genere como se muestra en la salida esperada . DATOS:

imprimir (df)

AGE GENDER rating 0 10 M PG 1 10 MR 2 10 MR 3 4 F PG13 4 4 F PG13 

CÓDIGO:

  s = (df.groupby(['AGE', 'GENDER'])['rating'] .apply(lambda x: x.value_counts().head(2)) .rename_axis(('a','b', 'c')) .reset_index(level=2)['c']) 

salida:

 print (s) ab 4 F PG13 10 MR M PG Name: c, dtype: object 

RENDIMIENTO ESPERADO :

 print (s[F]) ('PG13') print(s[M]) ('PG13', 'R') 

Creo que necesitas:

 s = (df.groupby(['AGE', 'GENDER'])['rating'] .apply(lambda x: x.value_counts().head(2)) .rename_axis(('a','b', 'c')) .reset_index() .groupby('b')['c'] .apply(list) .to_dict() ) print (s) {'M': ['R', 'PG'], 'F': ['PG13']}