Как сравнить каждое значение с максимальным значением для проекта в одном столбце в Pandas

1

Я бы хотел рассчитать 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

и я хочу сделать это действие для каждого идентификатора проекта

Теги:
pandas
dataframe

2 ответа

3

Трансляция с transform и вычитанием

df.groupby('projectID').score.transform('max') - df.score
1

Непрерывный, но быстрый/холодный способ использования 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню