我在Pandas中使用cut()对数值列的值进行分类。
df['bmi_bin']=pd.cut(df['Body Mass Index'],bins=4,labels=[0,1,2,3])
输出:
0 2
1 2
2 1
3 2
4 1
..
683 1
690 0
694 1
696 0
699 1
我试着把同样的代码放在一个循环中:
num_of_bins=4
for i in range(0,num_of_bins):
df['bmi_bin']=pd.cut(df['Body Mass Index'],bins=num_of_bins, labels=[i])
这给了我以下错误:
ValueError: Bin labels must be one fewer than the number of bin edges
我哪里做错了?标签[i]给出的标签值[0,1,2,3]小于4吗?
您的代码正试图将数据帧拆分为具有标签的不同箱子。但箱子和标签计数不匹配。在for循环中,你在不同的迭代中将数据帧分成0,1,2,3个箱子,但无论它是0,1,2还是3,每次都只有一个标签。如果你想使用循环,那么下面可以使用,但不确定你期望的输出-
num_of_bins=4
lt=[]
for i in range(0,num_of_bins):
lt.append(i)
df['bmi_bin']=pd.cut(df['Body Mass Index'],bins=i, labels=lt)