我有一个数据框架。我想发送一封关于整个流程状态的电子邮件。如果一个进程中的一个任务失败,那么整个进程都会失败。如果一个流程中的所有任务都成功了,则该流程是成功的。我在代码中创建这个逻辑时遇到了一些困难。
Process ID Task Execution Date Execution Time Start Date Start Time End Date End Time Status Emails
1 A 7/30/2019 13:15:00 7/31/2019 9:21:31 7/31/2019 9:21:51 Successful Not valid for this task.
1 B 7/30/2019 13:15:00 7/31/2019 9:23:41 7/31/2019 9:25:16 Successful Not valid for this task.
1 C 7/30/2019 13:15:00 7/31/2019 9:28:03 7/31/2019 9:28:28 Successful Not valid for this task.
1 D 7/30/2019 13:15:00 7/31/2019 9:19:22 7/31/2019 9:20:13 Successful Not valid for this task.
1 E 7/30/2019 13:15:00 7/31/2019 9:32:20 7/31/2019 9:32:40 Successful ['user1@gmail.com', 'user2@gmail.com', 'user3@gmail.com']
1 F 7/30/2019 13:15:00 7/31/2019 9:30:15 7/31/2019 9:30:35 Successful Not valid for this task.
1 G 7/30/2019 13:15:00 7/31/2019 9:17:17 7/31/2019 9:17:42 Successful Not valid for this task.
1 H 7/30/2019 13:15:00 7/31/2019 9:25:51 7/31/2019 9:26:31 Successful Not valid for this task.
2 A 8/1/2019 1:00:00 7/31/2019 23:06:22 7/31/2019 23:06:52 Successful ['user1@gmail.com', 'user2@gmail.com', 'user3@gmail.com']
2 B 8/1/2019 1:00:00 7/31/2019 23:03:30 7/31/2019 23:04:10 Successful Not valid for this task.
2 C 8/1/2019 1:00:00 7/31/2019 23:01:07 7/31/2019 23:01:37 FAILED ` Not valid for this task.我不确定将这个逻辑包含到我的代码中最有效的方法是什么。最终,这将针对具有任意数量任务的100+进程进行扩展。我应该将其保留为数据帧,还是另一种数据结构更适合?是否应该为最终成功状态创建一个变量?最终,我希望使用数据帧中的信息基于与流程相关的电子邮件发送电子邮件。这就是为什么我想把它保存在数据帧中。
在此场景中,逻辑Process 1为Successful,Process 2为FAILED
发布于 2019-08-09 07:24:28
按进程ID分组,并使用指示器随机变量表示失败的发生,原则上解决了您的问题。例如,您可以将失败进程的所有状态值设置为FAILED。
def status_summary(x):
if 'FAILED' in x['Status'].values:
x['Status'] = 'FAILED'
return x
df = df.groupby('Process_ID').apply(status_summary)
df[['Process_ID', 'Task', 'Status']]
Out[79]:
Process_ID Task Status
0 1 A Successful
1 1 B Successful
2 1 C Successful
3 1 D Successful
4 1 E Successful
5 1 F Successful
6 1 G Successful
7 1 H Successful
8 2 A FAILED
9 2 B FAILED
10 2 C FAILED由于保留原始信息更可取,因此您可以准备单独的状态摘要。
process_status = df.groupby(['Process_ID'])['Status'].apply(
lambda x: 'FAILED' if 'FAILED' in x.values else 'Success').reset_index()
process_status
Out[89]:
Process_ID Status
0 1 Success
1 2 FAILEDhttps://stackoverflow.com/questions/57362386
复制相似问题