如何在python panda中找到数据帧的一列中整数范围内的值的个数



所以我有一个大数据框架,里面有很多列,比如年龄、姓名、性别等。

我想做一个新的专栏,年龄段在1-10,11-20,21-30,。。。,71-80

我试着做

ranges = [1, 10, 20, 30, 40, 50, 60, 70, 80]
df.age.groupby(pd.cut(df.age, ranges)).count()

结果是

age
(1, 10]      64
(10, 20]    162
(20, 30]    361
(30, 40]    210
(40, 50]    132
(50, 60]     62
(60, 70]     27
(70, 80]      6
Name: age, dtype: int64

这正是我想要的,但是分组不正确。我希望是1-10,然后是11-20,而不是1-10和10-20。有人能帮我解决这个问题吗?

我认为首先有必要通过@samthegolden:的评论进行解释

(10,20](由于括号格式的原因,意思是"介于10和20之间,不包括10和20"。

但您可以通过列表理解中rangeszip创建的labels参数来实现:

np.random.seed(2020)
df = pd.DataFrame({'age':np.random.randint(1, 80, size=100)})
ranges = [1, 10, 20, 30, 40, 50, 60, 70, 80]
labels = ['{}-{}'.format(i + 1, j) for i, j in zip(ranges[:-1], ranges[1:])] 
labels[0] = '{}-{}'.format(ranges[0], ranges[1])
print (labels)
['1-10', '11-20', '21-30', '31-40', '41-50', '51-60', '61-70', '71-80']
ranges = [1, 10, 20, 30, 40, 50, 60, 70, 80]
s = df.age.groupby(pd.cut(df.age, ranges, labels=labels)).count()
print (s)
age
1-10     14
11-20    10
21-30    15
31-40    12
41-50     7
51-60    11
61-70    18
71-80    12
Name: age, dtype: int64

最新更新