Try:
#Use pd.Categorical to ensure sorting if column is not lexicographical ordered.
df['type'] = pd.Categorical(df['type'], ordered=True, categories=['s1','s2','s3'])
df['result'] = df.sort_values('type').groupby('name')['value'].diff(-1)
df['result'] = df['result'].lt(0).mask(df['result'].isna(),'')
df
Output:
index name type value result
0 1 A s1 20 False
1 2 A s2 10
2 3 B s1 18 True
3 4 B s2 32 False
4 5 B s3 25
2
solved Compare values under multiple conditions of one column in Python