我想了解以下内容: 1)如何计算百分位数。 2)为什么python没有以排序顺序(我的期望)作为输出返回值 3)我的要求是要知道实际值低于x%的人口。怎么做?
由于
的Python-2
new=pd.DataFrame({'a':range(10),'b':[60510,60053,54968,62269,91107,29812,45503,6460,62521,37128]})
print new.describe(percentiles=[ 0,0.1 ,0.2,0.3,0.4, 0.50, 0.6,0.7,0.8 ,0.90,1 ])
答案 0 :(得分:0)
1)如何计算百分位数
90%百分位/分位数意味着10%的数据大于该值,90%的数据低于该值。默认情况下,它基于线性插值。这就是为什么在a
列中,值增加0.9
而不是原始数据值[0, 1, 2 ...]
。如果要使用最近的值而不是插值,可以使用quantile method代替描述并更改插值参数。
2)为什么python没有将排序顺序的值(这是我的期望)作为输出返回给我
你的问题在这里不清楚。它确实以排序顺序返回值,根据.describe方法输出的输出索引:count,mean,std,min,从低到高的分位数,最大值。如果您只想要分位数而不是其他统计数据,则可以使用分位数方法。
3)我的要求是要知道实际值低于x%的人口。怎么做?
输出没有问题。这些分位数是准确的,但是当你的数据只有10个观测值时它们并不是很有意义。
编辑:我原本不清楚你是在尝试在频率表上做统计数据。我不知道大熊猫的直接解决方案,不涉及将数据移动到numpy数组。你可以使用numpy.repeat来获取一个原始观察列表,放回到熊猫中并进行描述性统计。
vals = np.array(new.a)
freqs = np.array(new.b)
observations = np.repeat(vals, freqs)