finals_preds= pd.concat([clf_preds,clf_pred_probs,ISFOR_clus_preds,SVM_clus_preds,KMEANS_clus_preds,LOCOUT_clus_preds, DBSC_clus_preds],axis=1)finals_preds.columns=['clf_class','clf_score', 'ISOFOR','SVM-1C','KMEANS','LOCOUT','DBSCAN']finals_preds
然后这是输出结果
然后真正的麻烦来了,当我尝试添加另一列来总结这些序列的众数时,错误提示说我试图将2列塞进1列中。
# 添加一列来总结所有分数finals_preds['ENSEMB']= finals_preds[['ISOFOR','SVM-1C','KMEANS','LOCOUT']].mode(axis=1)finals_preds
错误信息:
ValueError: Wrong number of items passed 2, placement implies 1
然后我检查了代码的右侧部分,这让我感到困惑:
我也打印了每个序列的众数结果,它们看起来都很正常,如下所示:
那么,为什么当我尝试一起计算它们的众数时会出现额外的列呢?
回答:
mode
返回最常出现的值。由于你有一个二元表,因此可能出现以下三种情况:
0 10 0.0 NaN # 第一行中0比1多1 1.0 NaN # 第二行中1比0多2 0.0 1.0 # 第三行中0和1数量相等
除非每一行中0和1的数量没有相等的情况,否则输出结果总是会有2列。
如果你想得到每行的最具代表性的值,可以这样做:
finals_preds['ENSEMB']= \ finals_preds[['ISOFOR','SVM-1C','KMEANS','LOCOUT']].mode(axis=1)[0]# HERE ---^^^