基于比较比较无序的DataFrame比较值并创建新列



我有2个DataFrame (PreServices, PostServices)每个DataFrame包含Windows服务和它们在给定时间的运行状态

Data是什么样子的?

  1. 没有服务名称的排列顺序
  2. PostServices可以有也可以没有PreServices
  3. 中的name
  4. PostServices可以有PreServices
  5. 中没有的名称

我想在PreServices中创建一个名为"final status"的新列,它的值应该是这样的:

  1. 如果PostServices和State中的Name是相同的'最终状态' == True
  2. 对于PreService中每个Name,如果PostServices和State中的Name不相同,'最终状态' = PostServices['State']
  3. PreService中未在PostService中的每个Name的"最终状态"= False

职前

Name    State
0                         VMTools  Running
1                             LSM  Running
2                        macmnsvc  Running
3    VMwareCAFManagementAgentHost  Running
4                          sppsvc  Stopped
5               LanmanWorkstation  Running
6                          MpsSvc  Running
7                           MSDTC  Running
8                            MSMQ  Running

PostServices

Name    State
0                        macmnsvc  Running
1                             LSM  Running
2                         VMTools  Stopped
3    VMwareCAFManagementAgentHost  Running
4                          sppsvc  Stopped
5               LanmanWorkstation  Running
6                          MpsSvc  Running
7                             xlp  Running

输出
Name    State     final status
0                         VMTools  Running   Stopped
1                             LSM  Running   True
2                        macmnsvc  Running   True
3    VMwareCAFManagementAgentHost  Running   True
4                          sppsvc  Stopped   True
5               LanmanWorkstation  Running   True
6                          MpsSvc  Running   True
7                           MSDTC  Running   False
8                            MSMQ  Running   False

下面的代码片段将得到您想要的输出:

def create_final_status(row):
if row['Name'] in PostServices['Name'].values:
if row['State'] == PostServices[PostServices['Name'] == row['Name']]['State'].item():
return True
else:
return PostServices[PostServices['Name'] == row['Name']]['State']
else:
return False
PreServices['final status'] = PreServices.apply(lambda row: create_final_status(row), axis = 1)

PreServices数据框现在看起来像这样:

+----+------------------------------+---------+----------------+
|    | Name                         | State   | final status   |
|----+------------------------------+---------+----------------|
|  0 | VMTools                      | Running | Stopped        |
|  1 | LSM                          | Running | True           |
|  2 | macmnsvc                     | Running | True           |
|  3 | VMwareCAFManagementAgentHost | Running | True           |
|  4 | sppsvc                       | Stopped | True           |
|  5 | LanmanWorkstation            | Running | True           |
|  6 | MpsSvc                       | Running | True           |
|  7 | MSDTC                        | Running | False          |
|  8 | MSMQ                         | Running | False          |
+----+------------------------------+---------+----------------+

最新更新