IIUC, используйте duplicated
на отсортированном фрейме данных:
df['Last Order'] = (df['ordernumber'].isin(df.loc[~df.duplicated(['id','quarter'],
keep='last'),'ordernumber']).astype(int))
Выход:
index id quarter ordernumber lotnumber1 Last Order
0 441670 10176228 2015Q2 108595504 12947-1 0
1 441211 10176228 2015Q2 108663905 12947-1 0
2 450008 10176228 2015Q2 108663905 129161 0
3 440268 10176228 2015Q2 108779992 12987-1 0
4 448187 10176228 2015Q2 108779992 12848-1 0
5 439085 10176228 2015Q2 108895691 12987-1 1
6 446123 10176228 2015Q2 108895691 12965-1 1
7 419419 10176228 2015Q3 109003405 12969-1 0
8 429893 10176228 2015Q3 109003405 12987-1 0
9 426850 10176228 2015Q3 109241988 13929 1
ИЛИ
df['Last Order'] = (~df.duplicated(['id','quarter'], keep='last')).astype(int)
df['Last Order'] = df.groupby(['id','quarter','ordernumber'], as_index=False)['Last Order'].transform('max')