我想将 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/