In [591]: df['d'] = df['c'] - df.loc[df.groupby('a')['b'].transform('idxmin'), 'c'].valuesIn [592]: dfOut[592]: a b c d0 R 1 2 01 R 2 4 22 R 3 6 43 R 4 8 64 S 0 5 05 S 1 4 -16 S 2 1 -47 S 3 3 -2
conditional_c = df.groupby('a').b.idxmin().map(df.c)df.assign(d=df.c - df.a.map(conditional_c)) a b c d0 R 1 2 01 R 2 4 22 R 3 6 43 R 4 8 64 S 0 5 05 S 1 4 -16 S 2 1 -47 S 3 3 -2
df['d']=df.groupby('a').apply(lambda x : x['c']-x['c'][x['b']==x['b'].min()].values).valuesdfOut[1305]: a b c d0 R 1 2 01 R 2 4 22 R 3 6 43 R 4 8 64 S 0 5 05 S 1 4 -16 S 2 1 -47 S 3 3 -2