Python - 如果单元格包含子字符串,则来自字典的 return 值

Python - return value from dict if cell contains substring

我正在处理 excel 文件,其中一列包含 "Description"(=字符串,即 "abc_123"),我需要根据描述创建类别。我查了Fuzzywuzzy lib,但是不太适合我的需求,因为描述可能很长,类别可以用一个词来描述,所以不匹配率很高。

我是如何在 excel 中做到的(区分大小写):

=IFERROR(INDEX($B:$B,MATCH(1,--NOT(NOT(FIND($A:$A,B2))),0)),"N/A")

事情在 python 我的解决方案 return 只有完全匹配,我想 return 甚至部分匹配(如果可能,不区分大小写)。

df = pd.DataFrame({'col1': {0: 'a', 1: "b", 2: "abc"}, 'col2': {0: np.nan, 1: np.nan, 2: np.nan}})
di = {"a": "1", "b":"2"}

    col1    col2
0   a   NaN
1   b   NaN
2   abc NaN

df.loc[df.col1.isin(di), 'col2'] = df['col1'].map(di)

col1    col2
0   a   1
1   b   2
2   abc NaN

我希望 col2:2 填充“1”,因为它是第一个匹配项 (a)。

编辑: 字典 - 字典{"Hosp":"Hospital", "emerg":"Hospital", "Fire":"Fire Department"}

我愿意:

"Hospital emergency" 到 return "Hospital"

"Hospi_emrgncy." 到 return "Hospital"

"Hopsital emergency" 到 return "Hospital"

"Fire in Detroit" 到 return "Fire Department"

for key, value in category_name.items():
    mask = np.column_stack([df['Description'].str.contains(key, na=False) for col in df])
    df2 = df.loc[mask.any(axis=1)]
    df2["Category"] = df2["Category"].fillna(value)
    df3 = df3.combine_first(df2)

终于找到解决办法了。绝不是完美的,但如果我有足够好的字典,这就可以了。