为了账号安全,请及时绑定邮箱和手机立即绑定

选择基于 where 语句的行

选择基于 where 语句的行

回首忆惘然 2022-01-11 19:41:28
如何选择其中包含“链接”一词的值并将它们放入类别 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
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

你可以使用np.select到组category到1或2取决于是否'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


查看完整回答
反对 回复 2022-01-11
?
一只名叫tom的猫

TA贡献1906条经验 获得超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

为您带来相同的结果。


查看完整回答
反对 回复 2022-01-11
  • 2 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信