Tengo una estructura de datos como la siguiente:

ID Value
A   70
A   80
B   75
C   10
B   50
A   1000
C   60
B   2000
..  ..

Me gustaría grupo de estos datos por ID, eliminar los valores extremos de los datos agrupados (el que acabamos de ver en el boxplot) y, a continuación, calcula la media.

Hasta ahora

grouped = df.groupby('ID')

statBefore = pd.DataFrame({'mean': grouped['Value'].mean(), 'median': grouped['Value'].median(), 'std' : grouped['Value'].std()})

¿Cómo puedo encontrar los valores extremos, eliminarlos y obtener las estadísticas.

InformationsquelleAutor chintan s | 2016-04-26

2 Comentarios

  1. 9

    Creo que el método que se está refiriendo es a quitar valores > 1.5 * el rango intercuartil lejos de la mediana. Así que, primero, calcular sus estadísticas iniciales:

    statBefore = pd.DataFrame({'q1': grouped['Value'].quantile(.25), \
    'median': grouped['Value'].median(), 'q3' : grouped['Value'].quantile(.75)})

    Y, a continuación, determinar si los valores en el original DF son valores atípicos:

    def is_outlier(row):
        iq_range = statBefore.loc[row.ID]['q3'] - statBefore.loc[row.ID]['q1']
        median = statBefore.loc[row.ID]['median']
        if row.Value > (median + (1.5* iq_range)) or row.Value < (median - (1.5* iq_range)):
            return True
        else:
            return False
    #apply the function to the original df:
    df.loc[:, 'outlier'] = df.apply(is_outlier, axis = 1)
    #filter to only non-outliers:
    df_no_outliers = df[~(df.outlier)]
    • Gracias Sam, esto es lo que yo estaba buscando. Por favor puede sugerir un buen tutorial sobre Pandas. Soy un principiante y no tiene mucha experiencia. Saludos!
    • ¿puede por favor explicar esta parte del código: statBefore.loc[fila.ID][‘q3’]
    • Esta función devuelve el cuantil correspondiente con respecto a las características individuales.
  2. 0

    acaba de hacer :

    In [187]: df[df<100].groupby('ID').agg(['mean','median','std'])
    Out[187]: 
       Value                  
        mean median        std
    ID                        
    A   75.0   75.0   7.071068
    B   62.5   62.5  17.677670
    C   35.0   35.0  35.355339
    • Gracias, pero me gustaría eliminar los valores extremos primero, antes de hacer la media, std cálculos. El outlier método que me gustaría usar es la utilizada por el Boxplot de los cálculos
    • Yo no conozco a este método. tiene referencias ?

Dejar respuesta

Please enter your comment!
Please enter your name here