edamame
Tengo un marco de datos de pandas my_df, donde puedo encontrar la media (), la mediana (), el modo () de una columna dada:
my_df['field_A'].mean()
my_df['field_A'].median()
my_df['field_A'].mode()
Me pregunto si es posible encontrar estadísticas más detalladas, como el percentil 90. ¡Gracias!
stackoverflowuser2010
- Puedes usar el
pandas.DataFrame.quantile()
función.- Si miras la API para
quantile()
, verá que se necesita un argumento sobre cómo hacer la interpolación. Si desea un cuantil que se encuentre entre dos posiciones en sus datos:- ‘lineal’, ‘inferior’, ‘superior’, ‘punto medio’ o ‘más cercano’.
- Por defecto, realiza una interpolación lineal.
- Estos métodos de interpolación se discuten en el artículo de Wikipedia para percentil
- Si miras la API para
import pandas as pd
import numpy as np
# sample data
np.random.seed(2023) # for reproducibility
data = {'Category': np.random.choice(['hot', 'cold'], size=(10,)),
'field_A': np.random.randint(0, 100, size=(10,)),
'field_B': np.random.randint(0, 100, size=(10,))}
df = pd.DataFrame(data)
df.field_A.mean() # Same as df['field_A'].mean()
# 51.1
df.field_A.median()
# 50.0
# You can call `quantile(i)` to get the i'th quantile,
# where `i` should be a fractional number.
df.field_A.quantile(0.1) # 10th percentile
# 15.6
df.field_A.quantile(0.5) # same as median
# 50.0
df.field_A.quantile(0.9) # 90th percentile
# 88.8
df.groupby('Category').field_A.quantile(0.1)
#Category
#cold 28.8
#hot 8.6
#Name: field_A, dtype: float64
df
Category field_A field_B
0 cold 96 58
1 cold 22 28
2 hot 17 81
3 cold 53 71
4 cold 47 63
5 hot 77 48
6 cold 39 32
7 hot 69 29
8 hot 88 49
9 hot 3 49
suponer serie s
s = pd.Series(np.arange(100))
Obtener cuantiles para [.1, .2, .3, .4, .5, .6, .7, .8, .9]
s.quantile(np.linspace(.1, 1, 9, 0))
0.1 9.9
0.2 19.8
0.3 29.7
0.4 39.6
0.5 49.5
0.6 59.4
0.7 69.3
0.8 79.2
0.9 89.1
dtype: float64
O
s.quantile(np.linspace(.1, 1, 9, 0), 'lower')
0.1 9
0.2 19
0.3 29
0.4 39
0.5 49
0.6 59
0.7 69
0.8 79
0.9 89
dtype: int32
Descubrí que a continuación funcionaría:
my_df.dropna().quantile([0.0, .9])
Incluso puede dar múltiples columnas con valores nulos y obtener múltiples valores de cuantiles (uso el percentil 95 para el tratamiento de valores atípicos)
my_df[['field_A','field_B']].dropna().quantile([0.0, .5, .90, .95])
una forma muy fácil y eficiente es llamar a la función describe en la columna en particular
df['field_A'].describe()
esto le dará la media, el máximo, la mediana y el percentil 75
mikelowry
Describe te dará cuartiles, si quieres percentiles, puedes hacer algo como
df['YOUR_COLUMN_HERE'].describe(percentiles=[.1, .2, .3, .4, .5, .6 , .7, .8, .9, 1])