条件If语句:如果行中的值包含字符串...设置另一列等于字符串

时间:2017-05-11 03:15:03

标签: python string if-statement conditional contains

编辑制作:

我有'活动'填充字符串的列,我想在' Activity_2'中导出值。使用if语句的列。

所以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

5 个答案:

答案 0 :(得分:15)

我假设您使用的是pandas,那么您可以使用numpy.where,它是 if / else 的矢量化版本,其条件由{{1}构成}:

str.contains

答案 1 :(得分:4)

这也有效:

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'

答案 2 :(得分:0)

您检查字符串的语法无效。

尝试使用

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

答案 3 :(得分:0)

如果您的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"))))

答案 4 :(得分:0)

另一个解决方案可以在@unutbu 的帖子中找到。这也适用于创建条件列。我更改了帖子 df['Set'] == Z 中的示例,以将您的问题与 df['Activity'].str.contains('yourtext') 匹配。请参阅下面的示例:

df = pd.DataFrame({'Activity': ['email person A', 'attend conference', 'call Charly'],
                       'Colleague': ['Knor', 'Koen', 'Hedge']})

conditions = [
    df['Activity'].str.contains('email'),
    df['Activity'].str.contains('conference'),
    df['Activity'].str.contains('call')]

values = ['email', 'conference', 'call']

df['Activity_2'] = np.select(conditions, values, default='task')

print(df)

您可以在此处找到原始帖子:Pandas conditional creation of a series/dataframe column