簡體   English   中英

從 pandas dataframe 的列中查找與另一個字符串列表中的任何項目匹配的字符串

[英]find a string from column in pandas dataframe which matches any item from another list of strings

我有一個 pandas 數據框 DF

 A                    
["I need PEN"   
["something went wrong in LAPTOP"      
"I eat MANGO"
"I dont know anything "]

和一個 Python 列表匹配["BAT","PEN","LAPTOP","I","SCHOOL",,,,]

需要添加一個與列表中的字符串匹配的新列 B

在此處輸入圖像描述

df['B']=df['A'].str.extract("(" + "|".join(matchers) + ")",expand=True)      

使用str.findall然后join

import pandas as pd
import re

df = pd.DataFrame({"A":["I need PEN",
                        "something went wrong in LAPTOP",
                        "I eat MANGO",
                        "I dont know anything about school"]})

matches = ["BAT","PEN","LAPTOP","I","SCHOOL"]
pattern = "|".join(f"\\b{i}\\b" for i in matches)

df["B"] = df['A'].str.findall(pattern,flags=re.IGNORECASE).str.join(",")

print (df)

#
                                   A         B
0                         I need PEN     I,PEN
1     something went wrong in LAPTOP    LAPTOP
2                        I eat MANGO         I
3  I dont know anything about school  I,school

只需使用df.apply function

def fn_apply(x):
    default_list = ["BAT","PEN","LAPTOP","I","SCHOOL"]
    b_list = []
    for item in default_list:
        if item.upper() in x.A.upper().split():
            b_list.append(item)
    return ",".join(b_list)

df['B'] = df.apply(fn_apply, axis=1)
df

    A                                   B
0   I need PEN                          PEN,I
1   something went wrong in LAPTOP      LAPTOP
2   eat MANGO   
3   dont know anythingabout school      SCHOOL

讓我知道這是否適合您

with easy pattern
import re
df['B'] = df['A'].str.findall('(' + '|'.join(matches) + ')', flags=re.IGNORECASE).str.join(',')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM