Python 计算每个供应商的最大分数-最小分数,单位为:

Python 计算每个供应商的最大分数-最小分数,单位为:,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我想计算熊猫数据框架中项目的最大分数-最小分数 当前df如下所示: projectID supplierID score 1 1 50 1 2 60 1 3 75 我希望它看起来像这样: 最大最小值=>75-50=25 projectID supplierID score max-min 1 1 50 25 1 2 6

我想计算熊猫数据框架中项目的最大分数-最小分数

当前df如下所示:

projectID supplierID score
1         1          50
1         2          60 
1         3          75
我希望它看起来像这样:
最大最小值=>75-50=25

projectID supplierID score max-min
1         1          50    25
1         2          60    25
1         3          75    25 
我想对每个projectd执行这个操作,您可以使用它通过一个lambda函数将结果广播回来,该函数进行减法和


您可以使用
GroupBy
+
transform

g = df.groupby('projectID')['score']
df['max-min'] = g.transform('max') - g.transform('min')
transform
方法将常规
GroupBy
的结果与grouper系列对齐。

使用(“峰对峰”):


您可以使用
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")

如果我想计算每个分数与最大分数之间的差异,该怎么办?如何做到这一点?
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
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")