Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何检查数据帧行在各个列中是否具有特定值,可伸缩性_Python 3.x_Pandas_Classification_Vectorization - Fatal编程技术网

Python 3.x 如何检查数据帧行在各个列中是否具有特定值,可伸缩性

Python 3.x 如何检查数据帧行在各个列中是否具有特定值,可伸缩性,python-3.x,pandas,classification,vectorization,Python 3.x,Pandas,Classification,Vectorization,我已经实现了CN2分类算法,它诱导规则对表单的数据进行分类: 如果Attribute1=a和Attribute4=b则class=class 1 我当前的实现使用iterrows()函数循环通过包含训练数据的pandas数据帧,如果每一行是否满足规则,则返回True或False。但是,我知道这是一个效率极低的解决方案。我想对代码进行矢量化,我目前的尝试如下: DataFrame = df age prescription astigmatism tear rate 1

我已经实现了CN2分类算法,它诱导规则对表单的数据进行分类:

如果Attribute1=aAttribute4=bclass=class 1

我当前的实现使用
iterrows()
函数循环通过包含训练数据的pandas数据帧,如果每一行是否满足规则,则返回True或False。但是,我知道这是一个效率极低的解决方案。我想对代码进行矢量化,我目前的尝试如下:

DataFrame = df
    age  prescription  astigmatism  tear rate  
    1      1              2            1         
    2      2              1            1         
    2      1              1            2         

rule = {'age':[1],'prescription':[1],'astigmatism':[1,2],'tear rate':[1,2]}
df.isin(rule)
这将产生:

age  prescription  astigmatism  tear rate  
True   True             True       True  
False  False            True       True  
False  True             True       True  
我将规则编码为一个字典,其中包含目标属性的单个值和非目标属性的所有可能值的集合


我想要的结果是,如果规则的条件满足与否,那么每一行都有一个True或False,并且计算为all True的行的索引。目前我只能得到一个数据帧,每个值都有一个T/F。具体来说,在我所展示的示例中,我希望结果是第一行的索引,这是唯一满足规则的行。

我认为您需要检查每行是否至少有一个值为
True
使用:

或检查所有值是否均
True
s使用:

对于可能的过滤,请使用:


是否还要为问题添加预期输出?可能正在查找
df[df.isin(规则).all(axis=1)]
df.index[df.isin(规则).all(1)]
是否需要
df.isin(规则).any(axis=1)
检查每行是否至少有一个值为
True
df.isin(规则).all(axis=1)
检查所有值是否为True?
mask = df.isin(rule).any(axis=1)

print (mask)
0    True
1    True
2    True
dtype: bool
mask = df.isin(rule).all(axis=1)

print (mask)
0     True
1    False
2    False
dtype: bool
df = df[mask]