我有2个DataFrame (PreServices, PostServices)每个DataFrame包含Windows服务和它们在给定时间的运行状态
Data是什么样子的?
- 没有服务名称的排列顺序
- PostServices可以有也可以没有PreServices 中的name
- PostServices可以有PreServices 中没有的名称
我想在PreServices中创建一个名为"final status"的新列,它的值应该是这样的:
- 如果PostServices和State中的Name是相同的'最终状态' == True
- 对于PreService中每个Name,如果PostServices和State中的Name不相同,'最终状态' = PostServices['State']
- 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 |
+----+------------------------------+---------+----------------+