python - 对另一列中的一列中的字符串进行分类 - python
问题描述
我有 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 列的帮助,将不胜感激。
解决方案
使用,Series.str.contains
创建一个布尔掩码 m1
,其中此掩码中的真值对应于Column A
包含来自的值的条件,Column B
以类似的方式创建布尔掩码 m2
,然后用于np.select
根据基于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')
# 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
推荐阅读
- jquery - 使用模态和局部视图编辑数据的问题
- javascript - 在不增加 colIds 的情况下更新 agGrid 中的 columnDef
- android - 如何在谷歌地图上显示经纬度
- c# - 对调用使用 HTTPClient 的私有方法的控制器操作进行单元测试
- javascript - .select2() 显示原始和 select2 下拉列表
- arrays - Qt3D统一整数数组
- r - R随机森林:当特征表中的列序列发生变化时,OOB错误率会发生变化
- javascript - 在 node.js 中使用 docker 引擎 API 创建 docker 服务
- tensorflow2.0 - 如果你使用 Tensorflow 数据集,你必须上传你的数据吗?
- javascript - 为什么在 magnific-popup 中单击事件不会触发到其父级?