将一列中的字符串分类到另一列中-python

将一列中的字符串分类到另一列中-python,python,pandas,dataframe,Python,Pandas,Dataframe,我有3列的数据框。A列包含许多产品的标题,B列包含所有品牌名称,C列包含所有产品的型号/系列。列A有+2000行,列B有大约50行,列C有大约200行。我想创建一个新的D列,该列对a列中的标题是否包括品牌、型号或通用进行分类 关于我的数据帧和D列中所需结果的示例 Column A Column B Column C Column D Running shoes Nike Airmax 2 Generic Nike airmax 2 Adidas

我有3列的数据框。A列包含许多产品的标题,B列包含所有品牌名称,C列包含所有产品的型号/系列。列A有+2000行,列B有大约50行,列C有大约200行。我想创建一个新的D列,该列对a列中的标题是否包括品牌、型号或通用进行分类

关于我的数据帧和D列中所需结果的示例

Column A        Column B   Column C    Column D
Running shoes   Nike       Airmax 2    Generic
Nike airmax 2   Adidas     All stars   Model/series
Airmax 2        Converse   Ultraboost  Model/series
Nike Shoes      Puma       Questar     Brand
如果a列中的一行包含品牌和型号,我希望D列将该行分类为型号/系列。列A中无法与品牌或型号/系列匹配的所有行应归类为通用

我开始尝试这样做:

df['Column D'] = df.apply(lambda x: x.Column_b in x.Column_a, axis=1)
这里我得到了一个错误,因为B列的行比a列少很多

然后我想知道循环是否是正确的方法,或者我是否需要使用正则表达式

对于如何获得所需的D列的任何帮助,我们将不胜感激。

可能类似于:

df['D'] = ['Brand' if x in df['B'].values else 'Model/Series' if x in df['C'].values else 'Generic' for x in df['A']]
我不能100%确定您的数据是否可以在a列实例中同时包含B列和C列实例,但如果是这样,在列表中添加另一个else(如果要捕获这两个实例的使用)是很简单的,要创建布尔掩码
m1
,其中此掩码中的真实值对应于
列a
包含
列B
中的值的条件,请以类似方式创建布尔掩码
m2
,然后使用从基于
m1
m2
的条件的选项中选择值:

m1 = df['Column A'].str.contains('|'.join(df['Column B']), case=False)
m2 = df['Column A'].str.contains('|'.join(df['Column C']), case=False)

df['Column D'] = np.select(
    [m1 & m2, m1, m2], ['Model/series', 'Brand', 'Model/series'], 'Generic')


你能解释一下Nike Air Max 2第行的输出吗?如何在输出中获得
型号/系列
?我从C列获得。因此,我想检查A列是否包含我在B列中获得的任何品牌或我在C列中获得的任何型号/系列。如果一行同时包含品牌和型号/系列,我希望D列中的匹配行为“型号/系列”
# print(df)
        Column A  Column B    Column C      Column D
0  Running shoes      Nike    Airmax 2       Generic
1  Nike airmax 2    Adidas   All stars  Model/series
2       Airmax 2  Converse  Ultraboost  Model/series
3     Nike Shoes      Puma     Questar         Brand