如何对Pandas数据框架中的数值范围进行分类[英] How to categorize a range of values in Pandas DataFrame

本文是小编为大家收集整理的关于如何对Pandas数据框架中的数值范围进行分类的处理方法,想解了如何对Pandas数据框架中的数值范围进行分类的问题怎么解决?如何对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:澄清一下,如果"面积"的值有 10.21,那么它在 [10,20] 的范围内,所以它必须标记为"B"或该范围值的其他标签.

推荐答案

对我来说工作 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

本文地址:https://www.itbaoku.cn/post/1728012.html