我有一个数据集,类似于上面使用read_csv函数读入python的数据集。我想做的是
将ring列更改为类别列,其中1-5个环为1级,5-10个环为2级,依此类推。现在我有一个看起来像这样的for循环
while j<4177 :
if (X[j][7]) < 9:
(X[j][7]) = 1
elif (X[j][7]) is 9 | (X[j][8]) is 10:
(X[j][7]) = 2
else:
(X[j][7]) = 3
j=j+1
有什么更有效的方法呢?
假设我想保留我的环列,而是在课程中添加另一栏,那么最好的方法是什么?
答案 0 :(得分:0)
我认为您可以使用cut
:
np.random.seed(100)
df = pd.DataFrame(np.random.randint(20, size=(20,2)), columns=['a','ring'])
print (df)
a ring
0 8 3
1 7 15
2 16 10
3 2 2
4 2 14
5 2 17
6 16 15
7 4 11
8 16 9
9 2 12
10 4 1
11 13 19
12 4 4
13 3 7
14 17 15
15 1 14
16 7 16
17 2 9
18 19 2
19 14 17
classes = 4
bins = np.linspace(0, classes * 5, classes + 1)
labels=['class ' + str(i + 1) for i in range(classes)]
print (bins)
[ 0. 5. 10. 15. 20.]
print (labels)
['class 1', 'class 2', 'class 3', 'class 4']
df['label'] = pd.cut(df['ring'], bins=bins, labels=labels)
print (df)
a ring label
0 8 3 class 1
1 7 15 class 3
2 16 10 class 2
3 2 2 class 1
4 2 14 class 3
5 2 17 class 4
6 16 15 class 3
7 4 11 class 3
8 16 9 class 2
9 2 12 class 3
10 4 1 class 1
11 13 19 class 4
12 4 4 class 1
13 3 7 class 2
14 17 15 class 3
15 1 14 class 3
16 7 16 class 4
17 2 9 class 2
18 19 2 class 1
19 14 17 class 4