python - 将 numpy 数组转换为类别

标签 python numpy pandas

我想将 numpy 数组转换为 5 个类别:非常低、低、平均、高、非常高;基于值是否为 -2 或更多 std。 dev 远离数组的平均值(非常低); -1 标准。 dev 或更多远离平均值(对于低等级);标准介于 -1 和 +1 之间。与平均值的偏差(平均值); +1 和 +2 标准之间。偏离平均值(对于高级)且大于 +2 标准差。开发人员。从平均值(非常高级)。

我尝试使用 stats.perentileofscore,但这并没有给我我想要的:

arr = np.random.rand(100)
[stats.percentileofscore(x, a, 'rank') for a in arr]

最佳答案

您可以在 Pandas 中使用 pd.cut

sd = arr.std()
m = arr.mean()
>>> pd.cut(arr, [m - sd* 10000, m - sd * 2, m - sd, m + sd, m + sd *2, m + sd* 10000])
[(0.204, 0.785], (0.204, 0.785], (0.785, 1.0764], (0.785, 1.0764], (0.204, 0.785], ..., (0.204, 0.785], (0.204, 0.785], (-0.0875, 0.204], (0.204, 0.785], (0.785, 1.0764]]
Length: 100
Categories (5, object): [(-2909.105, -0.0875] < (-0.0875, 0.204] < (0.204, 0.785] < (0.785, 1.0764] < (1.0764, 2910.0944]]

要重命名您的类别:

buckets = (pd.Categorical(pd.cut(arr, 
               [m - sd * 10000, m - sd * 2, m - sd, m + sd, m + sd * 2, m + sd * 10000]))
           .rename_categories(['very low', 'low', 'average', 'high', 'very high']))

>>> buckets
[average, average, high, high, average, ..., average, average, low, average, high]
Length: 100
Categories (5, object): [very low, low, average, high, very high]

关于python - 将 numpy 数组转换为类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35098606/

相关文章:

python - 使用 pandas 选择数据框中两个特定字符串之间的所有行

python - 将 json_normalize 用于带有列表的结构化多级字典

python - 如何防止plotly.figure_factory.create_table将整数转换为浮点值?

python - 递归映射对角线元素并检查条件,Python

python - Selenium 遍历下拉选择中的选项

python - 什么是快速 FIFO 队列的好方法?

python - numpy:通过沿新轴滚动并使用第二个数组中给出的变量移位来广播数组

python - Golang 阶乘显示错误的结果

python - 根据列的最大值删除 Pandas 数据框行

python - 将 pandas 数据框与关键重复项合并