选择基于where语句的行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择基于where语句的行相关的知识,希望对你有一定的参考价值。

如何选择在其中包含“链接”一词的值,并将它们放在category1中,并在其中添加“爆米花”以使其成为类别2而将所有其他内容放入类别3中?

这是一个示例,但我的实际数据集有数百行

data = 'model': [['Lisa', 'link'], ['Lisa 2', 'popcorn'], ['telephone', 'rabbit']],
        'launched': [1983, 1984, 1991]

df = pd.DataFrame(data, columns = ['model', 'launched'])

期望

 Model                 launched         category
 ['Lisa', 'link']        1983             1
 ['Lisa 2', 'popcorn']   1984             2
 ['telephone', 'rabbit'] 1991             3
答案

你可以使用apply函数:

创建一个def:

def get_categories(row):
    if 'link' in row.model:
        return 1
    elif 'popcorn' in row.model:
        return 2
    else:
        return 3

然后像这样称呼它:

df['category'] = df.apply(get_categories, axis=1)
df

输出:

    model           launched    category
0   [Lisa, link]        1983    1
1   [Lisa 2, popcorn]   1984    2
2   [telephone, rabbit] 1991    3

编辑:

基于@gred_data注释,您实际上可以在一行中执行此操作以提高性能:

df['category'] = df.model.apply(lambda x: 1 if 'link' in x else 2 if 'popcorn' in x else 3)
df

获得相同的结果。

另一答案

您可以使用np.selectcategory设置为12,具体取决于'link''popcorn'是否包含在给定列表中。将default设置为3,以确定它们都不包含在内:

import numpy as np
c1 = ['link' in i for i in df.model]
c2 = ['popcorn' in i for i in df.model]
df['category'] = np.select([c1,c2], [1,2], 3)

              model       launched  category
0         [Lisa, link]      1983         1
1    [Lisa 2, popcorn]      1984         2
2  [telephone, rabbit]      1991         3

以上是关于选择基于where语句的行的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:在WHERE子句中使用基于当前行中的值的过滤器进行选择

如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]

用于选择行的 Where 语句层次结构

MySQL WHERE语句筛选操作符

MySQL WHERE LIKE 语句:如何删除表中列子字符串不等于所需子字符串的行?

子选择查询是不是基于它之外的 WHERE 子句进行了优化? [关闭]