編集を編集:
文字列で満たされた「Activity」列があり、ifステートメントを使用して「Activity_2」列の値を導出したい。
そのため、Activity_2は目的の結果を示します。基本的に、どのタイプのアクティビティが発生しているかを呼び出したいと思います。
以下のコードを使用してこれを実行しようとしましたが、実行されません(エラーについては、以下のスクリーンショットを参照してください)。どんな助けも大歓迎です!
for i in df2['Activity']:
if i contains 'email':
df2['Activity_2'] = 'email'
Elif i contains 'conference'
df2['Activity_2'] = 'conference'
Elif i contains 'call'
df2['Activity_2'] = 'call'
else:
df2['Activity_2'] = 'task'
Error: if i contains 'email':
^
SyntaxError: invalid syntax
DfにNaN値が含まれている場合、現在のソリューションは正しく動作しません。その場合、私のために働いた次のコードを使用することをお勧めします
temp=df.Activity.fillna("0")
df['Activity_2'] = pd.np.where(temp.str.contains("0"),"None",
pd.np.where(temp.str.contains("email"), "email",
pd.np.where(temp.str.contains("conference"), "conference",
pd.np.where(temp.str.contains("call"), "call", "task"))))
pandas
を使用していると仮定すると、numpy.where
は、if/elseのベクトル化されたバージョンであり、str.contains
:
df['Activity_2'] = pd.np.where(df.Activity.str.contains("email"), "email",
pd.np.where(df.Activity.str.contains("conference"), "conference",
pd.np.where(df.Activity.str.contains("call"), "call", "task")))
df
# Activity Activity_2
#0 email personA email
#1 attend conference conference
#2 send email email
#3 call Sam call
#4 random text task
#5 random text task
#6 lwantto call call
これも機能します:
df.loc[df['Activity'].str.contains('email'), 'Activity_2'] = 'email'
df.loc[df['Activity'].str.contains('conference'), 'Activity_2'] = 'conference'
df.loc[df['Activity'].str.contains('call'), 'Activity_2'] = 'call'
文字列をチェックするための無効な構文があります。
使ってみて
for i in df2['Activity']:
if 'email' in i :
df2['Activity_2'] = 'email'