如何在python中查找数据帧列中整数范围内的值的数目

如何在python中查找数据帧列中整数范围内的值的数目,python,pandas,numpy,Python,Pandas,Numpy,所以我有一个大数据框,里面有很多列,比如年龄、姓名、性别等等 我想制作一个新专栏,介绍年龄在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 (4

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

我想制作一个新专栏,介绍年龄在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”

但您可以通过在列表理解中使用
zip
创建
labels
参数
ranges
来实现:

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

(10,20)
由于括号格式的原因,表示“介于10和20之间,不包括10,包括20”。
标签=[f'{x+1}-{y}'如果x!=1,否则f'{x}-{y}'表示zip中的x,y(范围,范围[1:])
-将其传递给
pd.cut的labels参数。如果我的答案有用,请不要忘记。谢谢。