使用 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_counts
和bins
参数:
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
我试图了解如何创建一个 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_counts
和bins
参数:
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