python - rango - Eliminar todos los datos sobre un percentil dado
varianza en python (2)
Numpy es mucho más rápido que Pandas para este tipo de cosas:
numpy.percentile(df.a,95) # attention : the percentile is given in percent (5 = 5%)
es equivalente pero 3 veces más rápido que:
df.a.quantile(.95) # as you already noticed here it is ".95" not "95"
Así que para su código, da:
df[df.a < np.percentile(df.a,95)]
Tengo un pandas de data
llamado DataFrame
con una columna llamada ms
. Quiero eliminar todas las filas donde data.ms
está por encima del percentil del 95%. Por ahora, estoy haciendo esto:
limit = data.ms.describe(90)[''95%'']
valid_data = data[data[''ms''] < limit]
que funciona, pero quiero generalizar eso a cualquier percentil. ¿Cuál es la mejor manera de hacer eso?
Utilice el método Series.quantile()
:
In [48]: cols = list(''abc'')
In [49]: df = DataFrame(randn(10, len(cols)), columns=cols)
In [50]: df.a.quantile(0.95)
Out[50]: 1.5776961953820687
Para filtrar filas de df
donde df.a
es mayor o igual que el percentil 95, haga lo siguiente:
In [72]: df[df.a < df.a.quantile(.95)]
Out[72]:
a b c
0 -1.044 -0.247 -1.149
2 0.395 0.591 0.764
3 -0.564 -2.059 0.232
4 -0.707 -0.736 -1.345
5 0.978 -0.099 0.521
6 -0.974 0.272 -0.649
7 1.228 0.619 -0.849
8 -0.170 0.458 -0.515
9 1.465 1.019 0.966