web-dev-qa-db-ja.com

条件付きIfステートメント:行の値に文字列が含まれる場合...別の列を文字列に設定します

編集を編集:

文字列で満たされた「Activity」列があり、ifステートメントを使用して「Activity_2」列の値を導出したい。

そのため、Activity_2は目的の結果を示します。基本的に、どのタイプのアクティビティが発生しているかを呼び出したいと思います。

以下のコードを使用してこれを実行しようとしましたが、実行されません(エラーについては、以下のスクリーンショットを参照してください)。どんな助けも大歓迎です!

enter image description here

    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
11
PineNuts0

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

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
16
Psidom

これも機能します:

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'
5
moshfiqur

文字列をチェックするための無効な構文があります。

使ってみて

 for i in df2['Activity']:
        if 'email' in i :
            df2['Activity_2'] = 'email'
0
Prakash Palnati