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

2024-04-27 15:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个python3脚本


我有一个“原创标题”专栏,里面我有不同的电影标题,即所有的星球大战电影(+这一集的名字)和星际迷航(+这一集的名字)。我想创建一个专栏,只向我展示《星际迷航》(没有剧情名称)、《星球大战》和《娜》。在

这是我新专栏的代码:

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"))

但是,它不起作用

^{pr2}$

我该怎么办?在


Tags: 标题df电影titlenpwhere名字pd
2条回答

我猜你用的是熊猫。我不知道pd.np.where方法,但是有一个np.where,您可以将它用于您的任务:

df['Trek_Wars'] = np.where(df['original_title'].str.contains('Star Wars'),
                           'star_wars', 'na')

注意,我们必须提供满足条件和不满足条件的值。对于多个条件,可以使用pd.DataFrame.loc

^{pr2}$

您可以使用字典映射进一步简化逻辑:

# 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

在您的例子中,两个值,即“星球大战”和“星际迷航”包含相同数量的字符(9),您可以只分割字符串直到前9个字母。 但要想对该列进行更精细的解析,您需要找到一种更好的方法。在

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

相关问题 更多 >