Я бы хотел рассчитать Max score - каждый балл для проекта в pandas Dataframe
текущий df выглядит так:
projectID supplierID score
1 1 50
1 2 60
1 3 75
Я хочу, чтобы это выглядело так:
projectID supplierID score diff_to_max
1 1 50 25
1 2 60 15
1 3 75 0
и я хочу сделать это действие для каждого идентификатора проекта
Трансляция с transform
и вычитанием
df.groupby('projectID').score.transform('max') - df.score
Непрерывный, но быстрый/холодный способ использования Numpy
i, r = pd.factorize(df.projectID)
score = df.score.values
out = np.empty(len(r), score.dtype)
out.fill(score.min() - 1)
np.maximum.at(out, i, score)
df.assign(diff_to_max=out[i] - score)
projectID supplierID score diff_to_max
0 1 1 50 25
1 1 2 60 15
2 1 3 75 0