python - 条件 If 语句:如果值包含字符串,则设置另一列等于字符串
问题描述
我写了一个 python 3 脚本
我有一个“original_title”列,其中我有不同的电影标题,包括《星球大战》(+剧集名称)和《星际迷航》(+剧集名称)的所有电影。我想创建一个仅显示“星际迷航”(没有剧集名称)、“星球大战”和“na”的专栏。
这是我的新专栏代码:
df['Trek_Wars'] = pd.np.where(df.original_title.str.contains("Star Wars"), "star_wars",
pd.np.where(df.original_title.str.contains("Star Trek"), "star_trek"))
但是,它不起作用
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-33-5472b36a2193> in <module>()
1 df['Trek_Wars'] = pd.np.where(df.original_title.str.contains("Star Wars"), "star_wars",
----> 2 pd.np.where(df.original_title.str.contains("Star Trek"), "star_trek"))
ValueError: either both or neither of x and y should be given
我应该怎么办?
解决方案
我假设您正在使用 Pandas。我不知道一种pd.np.where
方法,但有一种方法,np.where
您可以将其用于您的任务:
df['Trek_Wars'] = np.where(df['original_title'].str.contains('Star Wars'),
'star_wars', 'na')
请注意,我们必须提供满足条件和不满足条件的值。对于多个条件,您可以使用pd.DataFrame.loc
:
# set default value
df['Trek_Wars'] = 'na'
# update according to conditions
df.loc[df['original_title'].str.contains('Star Wars'), 'Trek_Wars'] = 'star_wars'
df.loc[df['original_title'].str.contains('Star Trek'), 'Trek_Wars'] = 'star_trek'
您可以使用字典映射进一步简化您的逻辑:
# map search string to update string
mapping = {'Star Wars': 'star_wars', 'Star Trek': 'star_trek'}
# iterate mapping items
for k, v in mapping.items():
df.loc[df['original_title'].str.contains(k), 'Trek_Wars'] = v
推荐阅读
- google-apps-script - Google脚本中的“委派被拒绝”
- c# - 两个协变接口的 C# 协方差问题
- 3d - 如何创建 USDZ 文件?
- nlp - 如何合并 2 个 LUIS 模型?
- python - 在 Antlr4 中解析字符串中的令牌
- facebook - 如何使用应用访问令牌获取 Facebook 应用的所有者电子邮件
- web-services - 启动wildfly时出现org.jboss.weld.exceptions.DefinitionException
- kakoune - Kakoune:如何在 goto 模式下映射“向前跳跃”和“向后跳跃”(例如,将“gp”映射到
) - node.js - Cheerio 在使用“包含”选择器时返回未定义
- node.js - Websockets 与针对用户特定细节的长轮询