我有如下两个数据框

我需要检查错误中是否存在代码,以便我可以按照类别对​​其进行分类,否则将输出NaN

尝试使用此功能但不起作用

    print(test['Error'].apply(lambda x: 0 if x in c1['A1'] else 1))


         Error
0   sampletest1
1  sampletest22
2   sampletest3
3         Test4
4         Test5

     Code   Category
0  test1  cat1
1  test2  cat2
2  test3  cat3


我需要输出

Error              Category
0   sampletest1    cat1
1  sampletest22    cat1
2   sampletest3    cat3
3         Test4    NaN
4         Test5    NaN

最佳答案

您可以为测试子字符串创建字典,循环并设置与Series.str.contains匹配的值:

d = df2.set_index('Code')['Category']
print (d)
Code
test1    cat1
test2    cat2
test3    cat3
Name: Category, dtype: object

for k, v in d.items():
    df1.loc[df1['Error'].str.contains(k), 'Category'] = v
print (df1)
          Error Category
0   sampletest1     cat1
1  sampletest22     cat2
2   sampletest3     cat3
3         Test4      NaN
4         Test5      NaN


另一个想法是使用DataFrame.itertuples

for x in df2.itertuples():
    df1.loc[df1['Error'].str.contains(x.Code), 'Category'] = x.Category

10-08 00:58