我有一个数据框,其中有一列具有数值。此列未很好地近似于正态分布。给定另一个不在该列中的数值,我如何计算它在该列中的百分位数?也就是说,如果该值大于列中值的 80% 但小于其他 20%,则它将位于第 20 个百分位。
原文由 Bluefire 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个数据框,其中有一列具有数值。此列未很好地近似于正态分布。给定另一个不在该列中的数值,我如何计算它在该列中的百分位数?也就是说,如果该值大于列中值的 80% 但小于其他 20%,则它将位于第 20 个百分位。
原文由 Bluefire 发布,翻译遵循 CC BY-SA 4.0 许可协议
要找到相对于数组(或在您的情况下为数据框列)的值的百分位数,请使用 scipy 函数 stats.percentileofscore()
。
例如,如果我们有一个值 x
(不在数据框中的其他数值)和一个引用数组 arr
(数据框中的列),我们可以找到 x
的百分位数:
from scipy import stats
percentile = stats.percentileofscore(arr, x)
请注意, stats.percentileofscore()
函数的第三个参数对百分位数的结果值有重大影响,即。 kind
。您可以选择 rank
, weak
, strict
和 mean
有关详细信息,请参阅 文档。
有关差异的示例:
>>> df
a
0 1
1 2
2 3
3 4
4 5
>>> stats.percentileofscore(df['a'], 4, kind='rank')
80.0
>>> stats.percentileofscore(df['a'], 4, kind='weak')
80.0
>>> stats.percentileofscore(df['a'], 4, kind='strict')
60.0
>>> stats.percentileofscore(df['a'], 4, kind='mean')
70.0
最后一点,如果您的值大于列中其他值的 80%,则它将位于第 80 个百分位(请参阅上面的示例,了解 kind
方法如何影响此最终值分数有点)而不是第 20 个百分位数。有关详细信息,请参阅 此维基百科文章。
原文由 wingr 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答879 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
对列进行排序,并查看该值是否在前 20% 或任何百分位数内。
例如:
或者,如果您想要实际的百分位数,只需使用
searchsorted
: