Python - 如果单元格包含子字符串,则从dict返回值

时间:2017-04-02 08:36:12

标签: python pandas dictionary substring lookup

我正在使用excel文件,其中一列包含“Description”(=字符串,即“abc_123”),我需要根据描述创建类别。我检查了Fuzzywuzzy lib,但它不太适合我的需求,因为描述可能很长,类别可以用一个词来描述,因此错配率非常高。

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

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

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

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)。

编辑: 字典 - dict {“Hosp”:“Hospital”,“emerg”:“Hospital”,“Fire”:“Fire Department”}

我想:

“医院急诊”返回“医院”

“Hospi_emrgncy”。返回“医院”

“Hopsital emergency”返回“医院”

“在底特律开火”返回“消防局”

1 个答案:

答案 0 :(得分:1)

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)

终于找到了解决方案。绝不是完美的,但如果我有足够好的词典,这就可以胜任。