我有一个列的列表,作为pandas df中的过滤条件,但该列表具有不同数量的列,我想用一种方法来自动过滤所有列,而不必单独指定它们。
代码如下所示:
filters = ['col_43', 'col_44', 'col_45', ...]
filtered_df = df[(df[filters[0]]=='Y') | (df[filters[1]]=='Y') | (df[filters[2]]=='Y')...]
有时列表可以包含10个过滤器,其他时候更多。自动化可能吗?
我用的是Pandas1.0.3
3条答案
按热度按时间ogsagwnx1#
由于所有列都有相同的条件,因此使用
any
和布尔索引:如果你想使用不同的条件,你需要一个字典:
ccrfmcuu2#
您可以使用
pd.DataFrame
equality method并将过滤器应用于filters
列表中的所有列:mozway更快:D
w3nuxt5m3#
是的,可以使用Python中的**any()**函数和列表解析来实现自动化。可以修改代码,以便根据筛选器列表中不同的列数动态应用筛选条件。下面是一个例子:
**df[filters].eq('Y ')创建一个布尔DataFrame,其中filters中指定的每一列都与值' Y '**进行比较。结果是一个DataFrame,在满足条件的情况下为True值,否则为False值。
然后,通过对该DataFrame应用any(axis=1)方法,它检查是否有任何列的每一行都具有True值。这将返回一个布尔Series,指示每行是否满足任何条件。