Python 3.x 如何检查数据帧行在各个列中是否具有特定值,可伸缩性
我已经实现了CN2分类算法,它诱导规则对表单的数据进行分类: 如果Attribute1=a和Attribute4=b则class=class 1 我当前的实现使用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
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]