如何在Pandas DataFrame中对一系列值进行分类

时间:2019-04-14 15:54:18

标签: python pandas

假设我具有以下DataFrame:

   Area
0  14.68
1  40.54
2  10.82
3  2.31
4  22.3

我想将这些值分类为范围。像A:[1,10],B:[11,20],C ...

   Area
0  B
1  D
2  C
3  A
4  C

我该如何使用Pandas?我尝试了以下代码:

bins = pd.IntervalIndex.from_tuples([(0, 11), (11, 20), (20, 50), (50, 100), (100, 500), (500, np.max(df["area"]) + 1)], closed='left')
catDf = pd.cut(df["area"], bins = bins)

但是“ cut”命令只是将范围值放在DataFrame中,而我要放置类别名称而不是范围。

编辑:我尝试将标签传递给剪切,但没有任何变化。 EDIT2 :要澄清一下,如果“ area”的值是10.21,则它在[10,20]的范围内,因此必须将该标签标记为“ B”或该范围内的其他标签

3 个答案:

答案 0 :(得分:1)

对我来说,cat.codes通过将列表a转换为numpy数组来进行索引编制:

a = list('ABCDEF')
df['new'] = np.array(a)[pd.cut(df["Area"], bins = bins).cat.codes]
print (df)
     Area new
0   14.68   B
1   40.54   C
2   10.82   A
3    2.31   A
4   22.30   C
5  600.00   F

catDf = pd.Series(np.array(a)[pd.cut(df["Area"], bins = bins).cat.codes], index=df.index)
print (catDf)
0    B
1    C
2    A
3    A
4    C
5    F
dtype: object

答案 1 :(得分:0)

假设bin是一个全局变量,则可以这样做

Title Inset

答案 2 :(得分:0)

您可以指定如下标签:

注意:不确定使用的范围是

pd.cut(df.Area, [1,10, 20, 50, 100], labels=['A', 'B', 'C', 'D'])

0    B
1    C
2    B
3    A
4    C
Name: Area, dtype: category
Categories (4, object): [A < B < C < D]