【问题标题】:Calculate Max score - Min score per supplier in Pandas计算最高分数 - Pandas 中每个供应商的最低分数
【发布时间】:2018-10-16 15:26:32
【问题描述】:

我想计算 Pandas 数据框中项目的最高分数 - 最低分数

当前 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 

我想为每个 projectID 执行此操作

【问题讨论】:

  • 如果我想计算每个分数与最高分数之间的差异怎么办?如何做到这一点?

标签: python pandas dataframe pandas-groupby


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用transform 将结果广播回来,传递一个减去maxmin 的lambda 函数

    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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你可以使用GroupBy + transform:

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

        transform 方法将来自常规 GroupBy 的结果与 grouper 系列对齐。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-08-03
          • 1970-01-01
          • 1970-01-01
          • 2020-04-09
          • 2016-05-28
          • 2017-02-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多