查找同一列中具有2个特定值的所有id



我有一个数据框架,其中包含员工、他们的经理和他们从事的项目的数据。数据框(稍微简化)如下所示:

EmployeeID  ManagerID  ProjectID
0            2         18        111
1            3         17        111
2            2         17        119
3            3         22        121
4            6         22        121
5            6         18        111
6            6         17        113
7            6         17        116

我想要得到与经理17和18都工作过的所有员工,在本例中是员工2和员工6。

我知道我可以写一个查询来获得与经理17或18一起工作的所有员工:

df.query('ManagerID == 17 | ManagerID == 18')

但是现在我需要找到所有与bot一起工作的员工,因为员工-经理的组合可以在数据框中被发现多次,我不能使用计数。我想我需要一个自连接,但我真的不知道如何在pandas中做到这一点。

您可以将DataFrame.drop_duplicatesDataFrame.pivotDataFrame.dropna一起用于两个管理器的所有EmployeeID:

df = df.query('ManagerID == 17 | ManagerID == 18')
#another solution for filter 
#df = df.query('ManagerID in [17, 18]')
emp = (df.drop_duplicates(subset=['EmployeeID','ManagerID'])
.pivot('EmployeeID','ManagerID','ProjectID')
.dropna()
.index
.tolist())
print (emp)
[2, 6]

最新更新