基于分类器等价创建pandas数据框架列



背景:我在数据上使用了两种不同的ML分类器,得到了三种不同的分类(2,1和0)。这里与类本身的性质无关。我想比较每个分类器的结果,并基于匹配在进一步的数据框架中分离数据。下面是我从另一个数据框创建一个数据框来根据分类器结果进行分析的地方:

步骤1:

analyze['noclean_match'] = analyze['vader_class_form']==analyze['roberta_class_formatted']
analyze['clean_match'] = analyze['vader_class_no_SW'] == analyze['roberta_class_nosw']

正如您所看到的,我正在尝试基于现有列下数据框的每一行上的整数值(2、1或0)的等效性来创建新的数据框列。

步骤2:现在我创建一个数据框架,用于对结果类进行视觉检查,并重置索引:

manual_exam = analyze[analyze['clean_match'] == True].sample(n=50)
manual_exam.reset_index(drop=True, inplace = True)

我所期望的是,在50个样本的所有情况下,我的每一行对于每个模型都应该具有相同的结果(2,1或0)。然而,在检查数据时,情况并非如此。例如:

print(manual_exam['vader_class_form'].iloc[1])
print(manual_exam['roberta_class_formatted'].iloc[1]) 

收益率:

2
1
不是

2
2 

所以我知道我正在做一些不正确的事情,但我不确定是否在步骤1中的条件逻辑创建基于行等效性的列,或者如果它是步骤2,我在选择列后根据布尔逻辑创建一个新的数据框。

有什么想法我可以补救这个吗?这是我的数据框架信息:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 1405 entries, 0 to 33
Data columns (total 8 columns):
#   Column                   Non-Null Count  Dtype 
---  ------                   --------------  ----- 
0   job_id                   1405 non-null   object
1   formatted                1405 non-null   object
2   vader_class_form         1405 non-null   int64 
3   roberta_class_formatted  1405 non-null   int64 
4   vader_class_no_SW        1405 non-null   int64 
5   roberta_class_nosw       1405 non-null   int64 
6   noclean_match            1405 non-null   bool  
7   clean_match              1405 non-null   bool 

我可以用另一种方法解决我的问题,但我不确定这是最有效/最优雅的方法:

manual_exam = analyze[analyze['vader_class_form']== analyze['roberta_class_formatted']].sample(n=50)

最新更新