选择基于 where 语句的行

如何选择其中包含“链接”一词的值并将它们放入类别 1 和其中的“爆米花”以使它们成为类别 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


回首忆惘然
浏览 149回答 2
2回答

不负相思意

你可以使用np.select到组category到1或2取决于是否'link'还是'popcorn'被包含在一个给定的列表。集default到3的地方都没有包含的情况:import numpy as npc1 = ['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  category0         [Lisa, link]      1983         11    [Lisa 2, popcorn]      1984         22  [telephone, rabbit]      1991         3

一只名叫tom的猫

您可以使用应用功能:创建一个定义: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    category0   [Lisa, link]        1983    11   [Lisa 2, popcorn]   1984    22   [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为您带来相同的结果。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python