根据不同数量的列进行选择

时间:2019-07-03 19:05:11

标签: pandas

我有一个带有'filter1','filter2',..'filter1000'列的df。 这些列中每个列的值都是文本“ true”或“ false”。

现在,我想编写一个函数,将这些过滤器名称的列表作为输入(例如['filter8','filter284'...,'filter323']),并仅返回其中一个或多个行更多的相应过滤器值为“ true”。

我确实写了这段代码:

def filter_by_precalculated_filters(df,filters_names):
    df = pd.concat(df.loc[df[filter_name] == 'true'] for filter_name in filters_names) 
    #do something with df here etc...

但是此解决方案似乎很糟糕,因为: 1.慢 2.如果过滤器不是一次性的,那么这将创建带有重复项的df(据我所知)。

那么什么是好的解决方案?

2 个答案:

答案 0 :(得分:0)

您可以在isin()中使用pandas.DataFrame()方法:

df = df.loc[df['column name to apply filter'].isin(filter_list)]

答案 1 :(得分:0)

df = df.loc[(df[filters_names]=='true').any(axis=1)]

就我而言。如果有几个您感兴趣的值,则:

df = df.loc[(df[filters_names].isin(values)).any(axis=1)]