使用 pandas.cut 对数据范围进行排序

Sort data ranges with pandas.cut

我试图了解如何创建一个 table 的数据,我使用 pandas.cut 将数据划分为多个容器,其中数据范围的顺序是正确的。 使用以下代码生成随机年龄:

import numpy as np
import pandas as pd
ages = np.random.standard_normal(1000)*20+30
ages[ages<0]=0
ages[ages>120]=120

我使用这条线对数据进行分类:

ages = pd.Series(ages, dtype=int)
ages_cut = pd.cut(ages,[0,20,40,60,80,100,120])

但是,当我使用 ages_cut.value_counts() 时,我得到的 table 年龄范围顺序错误:

(20, 40]      379
(0, 20]       268
(40, 60]      233
(60, 80]       56
(80, 100]       3
(100, 120]      0
dtype: int64

除了@QuangHoang 的评论,你可以使用value_countsbins 参数:

bins : int, optional

Rather than count values, group them into half-open bins, a convenience for pd.cut, only works with numeric data.

>>> ages.value_counts(bins=[0,20,40,60,80,100,120], sort=False)
(-0.001, 20.0]    334
(20.0, 40.0]      382
(40.0, 60.0]      224
(60.0, 80.0]       54
(80.0, 100.0]       6
(100.0, 120.0]      0
dtype: int64