Рассчитать максимальный балл - минимальный балл за поставщика в Пандах - PullRequest
0 голосов
/ 16 октября 2018

Я бы хотел рассчитать Максимальный балл - Мин. Балл для проекта в панде dataframe

текущий df выглядит так:

projectID supplierID score
1         1          50
1         2          60 
1         3          75

Я хочу, чтобы он выглядел какэто:
max-min => 75-50 = 25

projectID supplierID score max-min
1         1          50    25
1         2          60    25
1         3          75    25 

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

Ответы [ 4 ]

0 голосов
/ 16 октября 2018

Вы можете использовать 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")
0 голосов
/ 16 октября 2018

Вы можете использовать GroupBy + transform:

g = df.groupby('projectID')['score']
df['max-min'] = g.transform('max') - g.transform('min')

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* *;}}
0 голосов
/ 16 октября 2018

Использование np.ptp («от пика к пику»):

df['max-min']=df.groupby('projectID').score.transform(np.ptp)
#df.groupby('projectID').score.transform(np.ptp)
Out[229]: 
0    25
1    25
2    25
Name: score, dtype: int64
0 голосов
/ 16 октября 2018

Вы можете использовать transform для трансляции результатов обратно, передавая лямбда-функцию, которая вычитает max и min

df['max-min'] = df.groupby('projectID').score.transform(lambda s: s.max() - s.min())

    projectID   supplierID  score   max-min
0   1           1           50      25
1   1           2           60      25
2   1           3           75      25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...