![](/img/trans.png)
[英]Conditional If Statement: If value in row contains string ... set another column equal to string
[英]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.