-2

我试图了解以下内容: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 ])
4

1 回答 1

0

1)如何计算百分位数

90% 百分位数/分位数意味着 10% 的数据大于该值,90% 的数据低于该值。默认情况下,它基于线性插值。这就是为什么在您的a列中,值增加0.9而不是原始数据值[0, 1, 2 ...]。如果要使用最接近的值而不是插值,可以使用分位数方法代替 describe 并更改插值参数。

2)为什么python没有以排序顺序(这是我的期望)将值作为输出返回给我

你的问题在这里不清楚。它确实以排序顺序返回值,根据 .describe 方法输出的输出进行索引:计数、平均值、标准、最小值、从低到高的分位数、最大值。如果您只需要分位数而不需要其他统计信息,则可以改用分位数方法。

3)我的要求是知道 x% 的人口所在的实际值。怎么做?

输出没有任何问题。这些分位数是准确的,尽管当您的数据只有 10 个观察值时它们不是很有意义。

编辑:我最初并不清楚您是否试图在频率表上进行统计。我不知道不涉及将数据移动到 numpy 数组的 pandas 中的直接解决方案。您可以使用 numpy.repeat 来获取原始观察列表以放回 pandas 并对其进行描述性统计。

vals = np.array(new.a)
freqs = np.array(new.b)
observations = np.repeat(vals, freqs)
于 2017-10-22T06:39:31.887 回答