This is some example data:
lst = [['PF2', 'E1', -500, -127, 199971, 200164, True, True], ['PR2', 'E1', -500, -167, 199655, 200124, True, True], ['PF2', 'E1', -500, -167, 199645, 200124, False, True], ['PF2', 'E1', -400, -127, 199971, 200564, True, True], ['PR2', 'E1', -400, -167, 199155, 200324, True, True]]df = pd.DataFrame(lst, columns=["Name", "Part", "Rel_s", "Rel_e", "Abs_s", "Abs_e","Quality_Start", "Quality_End"])
I want to modify this dataframe to change the values of Abs_s
to the smallest for each combination of Part
and Rel_s
(and the same thing for Abs_e
with Part
and Rel_e
with the largest value). This part works well with this code:
df['Abs_s'] = df.groupby(["Part", "Rel_s"])['Abs_s'].transform('min')df['Abs_e'] = df.groupby(["Part", "Rel_e"])['Abs_e'].transform('max')
I like this solution because it seems simple and easily understandable; however, I also want to take into account the Quality values so that I take the minimum (or maximum) value where Quality_Start
(or Quality_End
) is True
. So in this case for E1
, -500
, the correct Abs_s
value should be 199655
and not 199645
.
Can I add these conditions? How else could I do this transformation?