Давайте определим ваш фрейм данных:
import pandas as pd
df = pd.DataFrame({'Machine': {0: 'M01',
1: 'M02',
2: 'M03',
3: 'M04',
4: 'M01',
5: 'M02',
6: 'M01',
7: 'M01'},
'Position': {0: 'PB0',
1: 'PB0',
2: 'PB0',
3: 'PB0',
4: 'PB1',
5: 'PB1',
6: 'PB1',
7: 'PB1'}})
Чтобы получить позиции каждой машины, независимо от дубликатов, мы можем использовать:
s = df.groupby('Machine')['Position'].apply(set)
Что выглядит следующим образом:
Machine
M01 {PB1, PB0}
M02 {PB1, PB0}
M03 {PB0}
M04 {PB0}
Name: Position, dtype: object
Чтобы получить только машины, позиции которых включают в себя PB0
и PB1
, мы можем использовать
s[s.apply(lambda x: x.issuperset({'PB1','PB0'}))].index
, который возвращает
Index(['M01', 'M02'], dtype='object', name='Machine')
(вы также можете добавить .to_list()
в конце, если вы предпочитаете список для индекса pd.Index)