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

时间:2016-10-20 02:43:57

标签: 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()

返回所有数字的平均值:

157.583333333

一半的数字小于100.我想知道是否有办法将数字分解为类别(基本上是对它们进行分类)。我将指定要对数字进行分类的组数,函数将返回一个列表,其中每个数字都替换为相应类别的索引。因此,小于100的数字将被赋予整数类别1.然后,100-200的数字将被赋予类别2等等。基本上某种舍入函数将数字四舍五入到值范围内:从0到100,从100.1到200.0等等

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

使用pd.cutbins=参数允许您定义要获取的类别数。结果是带有bin范围的系列:

pd.cut(df.a, bins=10)
Out[156]: 
0        (0, 101]
1        (0, 101]
2        (0, 101]
3        (0, 101]
4        (0, 101]
5        (0, 101]
6        (0, 101]
7      (101, 201]
8      (101, 201]
9      (201, 301]
10     (201, 301]
11    (901, 1001]
Name: a, dtype: category
Categories (10, object): [(0, 101] < (101, 201] < (201, 301] < (301, 401] ... (601, 701] < (701, 801] < (801, 901] < (901, 1001]]