Cómo hacer funciones definidas por el usuario para binned_statistic

Estoy usando el paquete de estadísticas scipy para llevar estadísticas a lo largo de un eje, pero tengo problemas para tomar la estadística de percentiles usando binned_statistic . He generalizado el código a continuación, donde estoy intentando tomar el percentil 10 de un conjunto de datos con valores x, y dentro de una serie de contenedores x, y falla.

Por supuesto, puedo hacer opciones de función, como la mediana, e incluso la desviación estándar np.std usando np.std . Sin embargo, no puedo averiguar cómo usar np.percentile porque requiere 2 argumentos (por ejemplo, np.percentile(y, 10) ), pero luego me da un ValueError: statistic not understood .

 import numpy as np import scipy.stats as scist y_median = scist.binned_statistic(x,y,statistic='median',bins=20,range=[(0,5)])[0] y_std = scist.binned_statistic(x,y,statistic=np.std,bins=20,range=[(0,5)])[0] y_10 = scist.binned_statistic(x,y,statistic=np.percentile(10),bins=20,range=[(0,5)])[0] print y_median print y_std print y_10 

Estoy en una pérdida e incluso he jugado un poco con funciones definidas por el usuario como esta, pero sin suerte:

 def percentile10(): return(np.percentile(y,10)) 

Cualquier ayuda es muy apreciada.

Gracias.

El problema con la función que definiste es que no requiere ningún argumento. Necesita tomar un argumento y que corresponda a su muestra, como esto:

 def percentile10(y): return(np.percentile(y,10)) 

También puedes usar una función lambda para la brevedad:

 scist.binned_statistic(x, y, statistic=lambda y: np.percentile(y, 10), bins=20, range=[(0, 5)])[0]