【问题标题】:How to check if Pandas column has value from list of string?如何检查 Pandas 列是否具有字符串列表中的值?
【发布时间】:2019-04-20 09:44:12
【问题描述】:

我有一个数据框和一个列表

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 循环并提高效率?

【问题讨论】:

标签: python pandas


【解决方案1】:

使用applylambda 喜欢:

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】:

    可以使用pandas的isin函数

    df['Names'].isin(kw)
    

    【讨论】:

    • 这是否检查子字符串?还是只是完美匹配?
    • 它只检查完美匹配。
    猜你喜欢
    • 2015-01-22
    • 2013-08-01
    • 2019-10-03
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多