选择基于where语句的行

时间:2019-04-16 15:06:52

标签: python pandas where

我该如何选择其中包含“链接”一词的值并将其设置为category1和“ popcorn”以使其分别为category2和所有其他归类为category3?

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

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

2 个答案:

答案 0 :(得分:4)

您可以使用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

declare const _moduleName;

答案 1 :(得分:3)

您可以使用套用功能:

创建一个定义:

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

获得相同的结果。