Вы можете использовать groupby
, чтобы получить максимальное и минимальное значения, а затем join
результаты для вашего "projectId" в качестве нового столбца:
import pandas as pd
df = pd.DataFrame([[1, 1, 30],
[1, 2, 50],
[2, 1, 60],
[2, 2, 40],
[1, 3, 20]],
columns=["projectID", "supplierID", "score"])
df.join( df.groupby(["projectID"])["score"].max()
- df.groupby(["projectID"])["score"].min(),
on="projectID", rsuffix="_max-min")