Select 行基于 where 语句
Select rows that based on a where statement
我如何 select 包含单词 "link" 的值并将它们归入类别 1 并在其中 "popcorn" 使它们成为类别 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
您可以使用 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
您可以使用应用功能:
创建一个定义:
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
得到相同的结果。
我如何 select 包含单词 "link" 的值并将它们归入类别 1 并在其中 "popcorn" 使它们成为类别 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
您可以使用 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
您可以使用应用功能:
创建一个定义:
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
得到相同的结果。