【问题标题】:categorize string from one column in another column - python从一列中对另一列中的字符串进行分类 - python
【发布时间】:2020-06-23 01:42:17
【问题描述】:

我有 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 列的帮助,我们将不胜感激。

【问题讨论】:

  • 你能解释一下Nike airmax 2行的输出吗?你是如何在输出中得到Model/series 的?
  • 我是从 C 列得到的。所以我想检查 A 列是否包含我在 B 列中获得的任何品牌或我在 C 列中获得的任何型号/系列。如果一行包含品牌和型号/系列我希望 D 列中的匹配行是“型号/系列”

标签: python pandas dataframe


【解决方案1】:

使用Series.str.contains 创建一个布尔掩码 m1,其中此掩码中的真值对应于Column A 包含来自Column B 的值的条件,以类似的方式创建布尔掩码 m2,然后使用np.select 根据m1m2 的条件从选项中选择值:

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

【讨论】:

    【解决方案2】:

    可能是这样的:

    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 来捕获两者,则很简单

    【讨论】:

      猜你喜欢
      • 2014-12-10
      • 2019-07-27
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 2022-02-04
      • 2015-10-29
      • 2019-02-25
      • 2021-09-26
      相关资源
      最近更新 更多