Python 将numpy数组转换为类别

Python 将numpy数组转换为类别,python,numpy,pandas,Python,Numpy,Pandas,我想把一个numpy数组转换成5类:非常低,低,平均,高,非常高;基于值与数组平均值的标准偏差是否为-2或更大(对于非常低的值)-1标准偏差或偏离平均值以上(低等级);平均值的标准偏差在-1和+1之间(对于平均值);在平均值+1和+2标准偏差之间(对于高级),并且大于平均值+2标准偏差(对于非常高级) 我尝试使用stats.perentileofscore,但这并不能满足我的需求: arr = np.random.rand(100) [stats.percentileofscore(x, a,

我想把一个numpy数组转换成5类:非常低,低,平均,高,非常高;基于值与数组平均值的标准偏差是否为-2或更大(对于非常低的值)-1标准偏差或偏离平均值以上(低等级);平均值的标准偏差在-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]]

谢谢@Alexander,我可以为这些类别指定名称吗?
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]