Python 如何在DataFrame中按值对数字进行分类

Python 如何在DataFrame中按值对数字进行分类,python,pandas,dataframe,Python,Pandas,Dataframe,与: 返回所有数字的平均值: import pandas as pd df = pd.DataFrame({'a':[1,2,3,4,5,12,14,121,131,298,299,1001]}) print df.a.mean() 一半的数字小于100。我想知道是否有一种方法可以将这些数字划分为基本分类的类别。我将指定要将数字分类到的组的数量,函数将返回一个列表,其中每个数字将替换为相应类别的索引。因此,小于100的数字将被赋予一个整数类别1。然后,从100到200的数字将被赋予类

与:

返回所有数字的平均值:

import pandas as pd     
df = pd.DataFrame({'a':[1,2,3,4,5,12,14,121,131,298,299,1001]})
print df.a.mean()

一半的数字小于100。我想知道是否有一种方法可以将这些数字划分为基本分类的类别。我将指定要将数字分类到的组的数量,函数将返回一个列表,其中每个数字将替换为相应类别的索引。因此,小于100的数字将被赋予一个整数类别1。然后,从100到200的数字将被赋予类别2等。本质上是某种舍入函数,将数字舍入到所有值的范围内:从0到100,从100.1到200.0等。使用pd.cut。bins=参数允许您定义要获取的类别数。结果是一系列的箱子范围:

157.583333333
使用pd.cut。bins=参数允许您定义要获取的类别数。结果是一系列的箱子范围:

157.583333333

其中每个数字都替换为相应类别的索引。或者只是在数据框中添加一列“category”?这样您就不会丢失输入的数字。其中,每个数字都将替换为相应类别的索引。或者只是在数据框中添加一列“category”?这样就不会丢失输入的数字。如果箱子的数量未知,但箱子的大小设置为“全部相等”,则如何使用此选项?箱子的大小是指每个箱子中要获取的元素的数量,或每个箱子范围的宽度?不确定你头脑中的箱子宽度是多少。这个问题建议固定的垃圾箱宽度为100,因此我的问题是。你不知道,pd.cut是以垃圾箱数量为导向的。它与OP中不连贯问题的第一部分相匹配:我提出了我将指定组的数量来对问题的数字部分进行分类,而你提出的100将得到一个整数类别1。然后,100-200之间的数字将被划分为2类,以此类推。如上所述,您无法定义这两个变量,因为这两个变量是相关的。顺便说一句,为了得到类似的结果,您可以添加参数labels=False,但同样,它是面向容器数量的,因此切割仍然围绕着最小值和最大值进行,并将其划分为您要求的容器数量。因此,对于pd.cut,您将得到最后一条记录的category=10,而不是11。最终取决于你想要实现什么。固定宽度/大小用整数除法表示,固定箱子用pd表示。如果箱子的数量未知,但箱子的大小设置为相等,则如何使用此选项?箱子的大小是指您希望在每个箱子中获得的元素数量,或每个箱子范围的宽度?不确定你头脑中的箱子宽度是多少。这个问题建议固定的垃圾箱宽度为100,因此我的问题是。你不知道,pd.cut是以垃圾箱数量为导向的。它与OP中不连贯问题的第一部分相匹配:我提出了我将指定组的数量来对问题的数字部分进行分类,而你提出的100将得到一个整数类别1。然后,100-200之间的数字将被划分为2类,以此类推。如上所述,您无法定义这两个变量,因为这两个变量是相关的。顺便说一句,为了得到类似的结果,您可以添加参数labels=False,但同样,它是面向容器数量的,因此切割仍然围绕着最小值和最大值进行,并将其划分为您要求的容器数量。因此,对于pd.cut,您将得到最后一条记录的category=10,而不是11。最终取决于你想要实现什么。固定宽度/大小通过整数分割处理,固定箱子通过pd切割处理
import pandas as pd     
df = pd.DataFrame({'a':[1,2,3,4,5,12,14,121,131,298,299,1001]})
df['category'] = df['a'] // 100 + 1
print(df[['a', 'category']])

       a  category
0      1         1
1      2         1
2      3         1
3      4         1
4      5         1
5     12         1
6     14         1
7    121         2
8    131         2
9    298         3
10   299         3
11  1001        11