我有一个带有'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(据我所知)。
那么什么是好的解决方案?
答案 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)]