代码之家  ›  专栏  ›  技术社区  ›  Sociopath

如何检查Pandas列是否具有字符串列表中的值?

  •  2
  • Sociopath  · 技术社区  · 6 年前

    df = pd.DataFrame({'IDs':[1234,5346,1234,8793,8793],
                        'Names':['APPLE ABCD ONE','APPLE ABCD','NO STRAWBERRY YES','ORANGE AVAILABLE','TEA AVAILABLE']})
    
    kw = ['APPLE ABCD', 'ORANGE', 'LEMONS', 'STRAWBERRY', 'BLUEBERRY', 'TEA COFFEE']
    

    我想创建一个新列 flag 如果 Names 列包含来自的关键字 kw ,标志将为1,否则为0。

    预期产出:

        IDs     Names               Flag
    0   1234    APPLE ABCD ONE      1
    1   5346    APPLE ABCD          1
    2   1234    NO STRAWBERRY YES   1
    3   8793    ORANGE AVAILABLE    1
    4   8793    TEA AVAILABLE       0
    

    ind=[]
    for idx, value in df.iterrows():
        x = 0
        for u in kw:
            if u in value['Names']:
                ind.append(True)
                x = 1
                break
        if x == 0:
            ind.append(False)
    
    df['flag'] = ind
    

    有没有其他方法可以避免for循环并提高其效率?

    1 回复  |  直到 6 年前
        1
  •  17
  •   Franco Piccolo    6 年前

    使用 apply lambda 比如:

    df['Names'].apply(lambda x: any([k in x for k in kw]))
    
    0     True
    1     True
    2     True
    3     True
    4    False
    Name: Names, dtype: bool
    
        2
  •  9
  •   Aditya Lahiri    5 年前

    您可以使用熊猫的isin功能

    df['Names'].isin(kw)