繁体   English   中英

条件If语句:如果值包含字符串,则将另一列设置为等于字符串

[英]Conditional If Statement: If value contains string then set another column equal to string

我写了一个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

我该怎么办?

我认为您正在使用熊猫。 我不知道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

在您的示例中,“ Star Wars”和“ Star Trek”这两个值都包含相同数量的字符(9),您可以将字符串拆分为前9个字母。 但是,对于该列的更精细的分析,您将需要找到一种更好的方法。

X['Film_Series'] = 0
for ind, row in df.iterrows():
    X['Film_Series'].loc[ind] = X['film_name'].loc[ind].str[:9]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM