¿Por qué hay un índice extra al usar aplicar en Pandas?

Cuando uso apply a una función definida por el usuario en Pandas, parece que Python está creando una matriz adicional. ¿Cómo podría deshacerme de él? Aquí está mi código:

 def fnc(group): x = group.C.values out = x[np.where(x < 0)] return pd.DataFrame(out) data = pd.DataFrame({'A':np.random.randint(1, 3, 10), 'B':3, 'C':np.random.normal(0, 1, 10)}) data.groupby(by=['A', 'B']).apply(fnc).reset_index() 

Existe este extraño índice Level_2 creado. ¿Hay alguna manera de evitar crearlo al ejecutar mi función?

  AB level_2 0 0 1 3 0 -1.054134802 1 1 3 1 -0.691996447 2 2 3 0 -1.068693768 3 2 3 1 -0.080342046 4 2 3 2 -0.181869799 

Como tal, no tendrá forma de evitar que aparezca el nivel_2. Esto se debe a que el resultado de su agrupación es un dataframe con varios elementos: pandas es lo suficientemente bueno para comprender que su deseo es transmitir estos elementos a través de las claves agrupadas, pero está tomando el índice del dataframe como un nivel adicional para garantizar datos de salida coherentes. Por lo tanto, se espera que el nivel de caída = -1 al final de su procesamiento explícitamente.

Si desea evitar restablecer ese índice adicional, pero aún tiene algo de procesamiento posterior, otra manera sería llamar a transformar en lugar de aplicar, y obtener los datos devueltos de fnc como el vector de grupo completo donde se coloca np.nan para obtener resultados. excluir. Entonces, su dataframe no tendrá un nivel adicional, pero deberá llamar a dropna() después.