假设我具有以下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”或该范围内的其他标签
答案 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]