代码之家  ›  专栏  ›  技术社区  ›  Jennifer Crosby

查找pandas数据框列(段落或列表)包含另一个列表中任何值的行

  •  2
  • Jennifer Crosby  · 技术社区  · 9 月前

    我有一个Pandas DataFrame,其中包含有关各种作业的信息。我正在根据一些列表中的值进行过滤。

    我对单值条件过滤没有问题。但是,我在对 Job Description 字段,本质上是一个段落和多行,以及 Job Skills 字段,在我拆分后基本上是一个列表 \n\n .

    示例数据:

        dftest=pd.DataFrame({
            'Job Posting':['Data Scientist', 'Cloud Engineer', 'Systems Engineer', 'Data Engineer'],
            'Time Type':['Full Time', 'Part Time', 'Full Time', 'Part Time'], 
            'Job Location': ['Colorado', 'Maryland', 'Florida', 'Virginia'], 
            'Job Description': [
                'asdfas fasdfsad sadfsdaf sdfsdaf',
                'asdfasd fasdfasd fwertqqw rtwergd fverty',
                'qwerq e5r45yb rtfgs dfaesgf reasdfs dafads',
                'aweert scdfsdf asdfa sdfsds vwerewr'],
            'Job Skills': [
                'Algorithms\n\nData Analysis\n\nData Mining\n\nData Modeling\n\nData Science\n\nExploratory Data Analysis (EDA)\n\nMachine Learning\n\nUnstructured Data',
                'Application Development\n\nApplication Integrations\n\nArchitectural Modeling\n\nCloud Computing\n\nSoftware Product Design\n\nTechnical Troubleshooting',
                'Configuration Management (CM)\n\nInformation Management\n\nIntegration Testing\n\nRequirements Analysis\n\nRisk Management\n\nVerification and Validation (V&V)',
                'Big Data Analytics\n\nBig Data Management\n\nDatabase Management\n\nData Mining\n\nData Movement\n\nETL Processing\n\nMetadata Repository']
        })
    
    职位发布 时间类型 工作地点 职位描述 工作技能
    0 数据科学家 充分的时间 马里兰州 美国食品药品监督管理局 算法\n\n数据分析\n\n Python数据。。。
    1. 云工程师 兼任 马里兰州 asdfasd fasdfasd fortqqw rtwergd房地产 应用程序开发\n\n应用程序集成。。。
    2. 系统工程师 充分的时间 弗吉尼亚 qwerq e5r45yb rtfgs dfaesgf增加dfs 配置管理(CM)\n\n信息管理。。。
    3. 数据工程师 兼任 弗吉尼亚 aweer scdfsf as dfa sdfsds vwerewr 大数据分析\n\n大数据管理\n\n P。。。

    按“\n\n”列出和分割“工作技能”数据:

        state = ['Virginia', 'Maryland', 'District of Columbia']
        time = ['Full Time']
        skills = ['AI', 'Artificial Intelligence', 'Deep Learning', 'Machine Learning', 
            'Feature Selection', 'Feature Selection', 'Python', 'Cloud Computing'] 
        dftest['Job Skills'] = dftest['Job Skills'].str.split('\n\n')
    

    结果:

    [Algorithms, Data Analysis, Data Mining, Data Modeling, Data Science, Exploratory Data Analysis (EDA), Machine Learning, Unstructured Data]
    
    [Application Development, Application Integrations, Architectural Modeling, Cloud Computing, Software Product Design, Technical Troubleshooting]
    
    [Configuration Management (CM), Information Management, Integration Testing, Requirements Analysis, Risk Management, Verification and Validation (V&V)]
    
    [Big Data Analytics, Big Data Management, Database Management, Data Mining, Data Movement, ETL Processing, Metadata Repository]
    

    条件过滤:

        dftest[dftest['Job Location'].isin(state) & dftest['Time Type'].isin(time)]
    

    结果:

    职位发布 时间类型 工作地点 职位描述 工作技能
    0 数据科学家 充分的时间 马里兰州 美国食品药品监督管理局 [算法,数据分析,Python,数据迷你。。。
    2. 系统工程师 充分的时间 弗吉尼亚 qwerq e5r45yb rtfgs dfaesgf增加dfs 配置管理(CM)、信息管理。。。

    问题: 现在我想把这些值 dftest['Job Skills'] 并找到与匹配的所有行 skills 列表。

    我尝试过,其中包括:

    • 迭代字段中的值并与技能列表进行比较,然后反过来做,但这行不通。
    • dftest['Job Skills'].filter(like=skills, axis=0) ,但这会产生另一个错误。

    我想我几乎已经做到了,但如果有比赛,我只想有一排独特的队伍。例如,这显示第0行和第3行匹配,因此我希望打印这些行。

        for i in skills:
            print('skill: ',i)
            print(dftest['Job Skills'].map(set([i]).issubset))
    
    1 回复  |  直到 9 月前
        1
  •  1
  •   Andrej Kesely    9 月前

    IIUC,你可以使用 pd.Series.apply() + any() :

    out = dftest[dftest["Job Skills"].apply(lambda x: any(s in skills for s in x))]
    print(out)
    

    打印:

          Job Posting  Time Type Job Location                           Job Description                                                                                                                                        Job Skills
    0  Data Scientist  Full Time     Colorado          asdfas fasdfsad sadfsdaf sdfsdaf       [Algorithms, Data Analysis, Data Mining, Data Modeling, Data Science, Exploratory Data Analysis (EDA), Machine Learning, Unstructured Data]
    1  Cloud Engineer  Part Time     Maryland  asdfasd fasdfasd fwertqqw rtwergd fverty  [Application Development, Application Integrations, Architectural Modeling, Cloud Computing, Software Product Design, Technical Troubleshooting]