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

dem*_*emo 5 python pandas

假设我有以下DataFrame:

   Area
0  14.68
1  40.54
2  10.82
3  2.31
4  22.3
Run Code Online (Sandbox Code Playgroud)

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

   Area
0  B
1  D
2  C
3  A
4  C
Run Code Online (Sandbox Code Playgroud)

如何使用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)
Run Code Online (Sandbox Code Playgroud)

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

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

jez*_*ael 4

对于我来说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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)