En primer lugar, quiero agrupar filas diferentes, si su primer elemento en la fila es el mismo, luego aplanar cada columna en un grupo en una lista.
Mi marco de datos inicial:

Y mi objetivo:

El problema es que no puedo usar simplemente df.groupby('key').apply(list) porque aplanará las columnas val1 y v al2 juntas`
¿Hay alguna manera de hacer esto?
Usa agg en lugar de apply :
df.groupby('key').agg(list)Producción:
key val1 val2 0 key1 [1, 2, 5] [2, 3, 6]