如何在熊猫的同一列中比较项目的每个值和最大值

时间:2018-10-16 17:11:26

标签: python 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

我想对每个projectID进行此操作

2 个答案:

答案 0 :(得分:3)

通过transform广播并减去

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

答案 1 :(得分: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