2024-09-30 14:16:57 发布
网友
我有一个名为DataFrame的pandasdata和一个名为ms的列。我想删除data.ms高于95%的所有行。现在,我要做的是:
DataFrame
data
ms
data.ms
limit = data.ms.describe(90)['95%'] valid_data = data[data['ms'] < limit]
但我想把它推广到任何百分位数。最好的办法是什么?
使用^{}方法:
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
要筛选出df行,其中df.a大于或等于第95个百分点do:
df
df.a
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
在这类事情上,numpy比熊猫快得多:
numpy.percentile(df.a,95) # attention : the percentile is given in percent (5 = 5%)
相当于但比以下速度快3倍:
df.a.quantile(.95) # as you already noticed here it is ".95" not "95"
所以对于你的代码,它给出了:
df[df.a < np.percentile(df.a,95)]
使用^{} 方法:
要筛选出
df
行,其中df.a
大于或等于第95个百分点do:在这类事情上,numpy比熊猫快得多:
相当于但比以下速度快3倍:
所以对于你的代码,它给出了:
相关问题 更多 >
编程相关推荐