sort_values head , iat, , :
grouped = (df.sort_values(['COL1','COL2','COL3'], ascending=[True, True, False])
.groupby(['COL1', 'COL2'])['COL3']
.agg(['max', lambda x: x.head(2).iat[-1]])
)
grouped.columns = ['COL3','COL4']
grouped = grouped.reset_index()
print (grouped)
COL1 COL2 COL3 COL4
0 A 1 0.4 0.2
1 B 4 0.7 0.7