在Pandas中计算每个供应商的最高分数和最低分数差值

3
我想在 Pandas 数据框中计算项目的最高分数减去最低分数。
当前数据框如下所示:
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执行此操作。

如果我想计算每个分数与最高分之间的差异,该怎么做?如何实现? - JuniorAngelo
4个回答

4
使用 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

3
您可以使用 transform 函数,并传递一个 lambda 函数,该函数减去 maxmin,以广播结果。
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

2
你可以使用groupby函数获取最大值和最小值,然后将结果按照"projectId"作为新列进行join操作:
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")

1

您可以使用GroupBy + transform

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

transform 方法将常规 GroupBy 的结果与分组器序列对齐。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接