【问题标题】:Creating a variable/column based on an OR conditon基于 OR 条件创建变量/列
【发布时间】:2019-08-05 16:12:26
【问题描述】:

我有一个数据框。我想发送一封关于整个过程状态的电子邮件。如果一个进程中的一个任务失败了,那么整个进程就失败了。如果一个进程中的所有任务都成功,则该进程是成功的。我在我的代码中创建这个逻辑时遇到了一些困难。

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 1SuccessfulProcess 2FAILED

【问题讨论】:

    标签: python pandas dictionary if-statement


    【解决方案1】:

    按进程 ID 分组并使用指示符随机变量来判断 FAILED 的发生情况,原则上可以解决您的问题。例如,您可以将失败进程的所有状态值设置为 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   FAILED
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多