编辑制作:
我有'活动'填充字符串的列,我想在' Activity_2'中导出值。使用if语句的列。
所以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
答案 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