我有如下两个数据框
我需要检查错误中是否存在代码,以便我可以按照类别对其进行分类,否则将输出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