Python 条件If语句:如果行中的值包含字符串。。。将另一列设置为字符串
编辑制作: 我用字符串填充了“Activity”列,并希望使用if语句派生“Activity_2”列中的值 因此,活动_2显示了期望的结果。本质上,我想指出正在发生的活动类型 我尝试使用下面的代码来执行此操作,但它无法运行(请参阅下面的屏幕截图以了解错误)。非常感谢您的帮助Python 条件If语句:如果行中的值包含字符串。。。将另一列设置为字符串,python,string,if-statement,conditional,contains,Python,String,If Statement,Conditional,Contains,编辑制作: 我用字符串填充了“Activity”列,并希望使用if语句派生“Activity_2”列中的值 因此,活动_2显示了期望的结果。本质上,我想指出正在发生的活动类型 我尝试使用下面的代码来执行此操作,但它无法运行(请参阅下面的屏幕截图以了解错误)。非常感谢您的帮助 我假设您使用的是pandas,那么您可以使用numpy.where,它是if/else的矢量化版本,条件由str.contains构造: df['Activity_2'] = pd.np.where(df.Activity
我假设您使用的是
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
用于检查字符串的语法无效 试用
for i in df2['Activity']:
if 'email' in i :
df2['Activity_2'] = 'email'
这也适用于:
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"))))
另一个解决方案可以在@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)
你可以在这里找到原始帖子:如果我=='email',你有没有尝试过
:df2['Activity_2']='email'
“不会运行”是非常没有帮助的。谢谢快速回复。当我尝试上面的代码时,我的代码中没有“Activity_2”列dataframe@donk当前位置我已将我的错误张贴在我的message@Psidom你能帮我解决一个问题吗?我在这里认识了几年,但我有成千上万行这样的代码,你如何有效地实现它们?
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)