首页 > 解决方案 > 带有可选条件的 Pandas 数据框过滤

问题描述

我有一个关于通过选项填充熊猫数据框的问题,如下所示:

请求:如果 'brand'=='All" 或 'lo' == 'All',将从过滤中排除。问题:我尝试如下处理但不起作用。请帮我修复代码。

def filter_for_company(df_source, season, brand, lo):
    mask = (
               (df_source['Production Priority'] == 'Primary')
            &  (df_source['Season'] == season)
            &  (if brand =='All':
                    pass
                else:
                    df_source['Brand'] == brand
                )
            &  (if lo ='All':
                    pass
                else:    
                    df_source['Liaison Office Code'] == lo
                )             
    )            
    company_df = df_source.loc[mask,:]
    return company_df

标签: pythonpandasdataframe

解决方案


pandas 数据帧的条件切片使用lociloc设计用于根据数据帧中实际存在的值进行过滤。您想要实现的目标应该由调用您的过滤函数的代码单独处理。
但是,如果您无法控制它,您可以修改您的函数,如下所示:

def filter_for_company(df_source, season, brand, lo):
    mask = (
        (df_source["Production Priority"] == "Primary") 
        & (df_source["season"] == season)
    )

    if brand != "All":
        df_source = df_source[df_source["Brand"] == brand]

    if lo != "All":
        df_source = df_source[df_source["Liaison Office Code"] == lo]

    company_df = df_source.loc[mask, :]
    return company_df

推荐阅读