Сначала используйте pd.query () для удаления строк 'X Company', чем groupby оставшиеся df, например:
import numpy as np
import pandas as pd
ids = [0,0,0,1,1,1,2,3,3]
company = ['Other Company','Other Company','X Company','Other Company','Other Company','X Company','X Company','Other Company','X Company']
duration = [5,19,7,24,6,12,9,30,16]
df = pd.DataFrame({'ids':ids,'company':company,'duration':duration})
df.query("company=='Other Company'").groupby(['ids','company'])['duration'].agg(sum)
Вы получаете:
ids company
0 Other Company 24
1 Other Company 30
3 Other Company 30
Name: duration, dtype: int64
РЕДАКТИРОВАТЬ: Кроме того, вы можете использовать комбинацию pd.where () , dropna () и pd.pivot_table () с:
df.where(df['company']=='Other Company').dropna().pivot_table(['duration'],index=['ids','company'],aggfunc='sum')
Вы получаете:
duration
ids company
0.0 Other Company 24.0
1.0 Other Company 30.0
3.0 Other Company 30.0
Тем не менее, первое происходит быстрее:
2,03 мс ± 62,3 мкс на цикл (среднее± стандартное отклонение из 7 циклов, по 100 циклов в каждом)
5,87 мс ± 23,4 мкс на цикл (среднее ± стандартное отклонение из 7 циклов, по 100 циклов в каждом)