编辑完成:
我的“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
我假设您使用的是
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'
如果 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"))))
检查字符串的语法无效。
尝试使用
for i in df2['Activity']:
if 'email' in i :
df2['Activity_2'] = 'email'
DEFAULT_ACTIVITY = 'task'
def assign_activity(todo_item):
"""Assign activity to raw text TODOs
"""
activities = ['email', 'conference', 'call']
for activity in activities:
if activity in todo_item:
return activity
else:
# Default value
return DEFAULT_ACTIVITY
df = pd.DataFrame({'Activity': ['email person A', 'attend conference', 'call Charly'],
'Colleague': ['Knor', 'Koen', 'Hedge']})
# You should really come up with a better name than 'Activity_2', like 'Labels' or something.
df["Activity_2] = df["Activity"].apply(assign_activity)
另一个解决方案可以在@unutbu 发表的帖子中找到。这对于创建条件列也非常有用。我更改了该帖子
df['Set'] == Z
中的示例,以将您的问题与 df['Activity'].str.contains('yourtext')
相匹配。请参阅下面的示例:
import pandas as pd
import numpy as np
df = pd.DataFrame({'Activity': ['email person A', 'attend conference', 'call foo']})
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 有条件创建系列/数据框列
用一个相关问题重新提出这个问题,我希望得到一些帮助: 如果我的 PDF 模板有一个名为“Response_Type”的下拉表单字段,用于选择模板将用于的回复信函类型,其中用户从组合框项目中进行选择,每个项目都包含单词“成员”或“提供者”,如何运行“Salution”表单字段的脚本来检查是否根据所选的“Response_Type”发布/显示“亲爱的会员:”或“亲爱的提供商:”? 提前非常感谢!
似乎应该存在 if((this.getField("Response_Type").value == "Provider")) 的某种变体,其中 == 被替换为 CONTAINS,当然不存在这样的语法。 有什么解决办法吗?
if((this.getField("Response_Type").value CONTAINS "Provider")) event.value = "尊敬的提供者:"; 别的 if((this.getField("Response_Type").value CONTAINS "会员申诉 -")) event.value = "尊敬的会员:"; 别的 事件.value = "