0

df 列如下:

  Key1   Key2   Val1  

需要输出 我想要 groupby 输出,其中 Val1 列的值与python 中的 key1 和 Key2 上的 groupby结合在一起。

预期输出:df2 [key1 和 key2 上的 groupby]

Key1 Key2 Val1  Count Sum Q1  Q2  Q3
4

2 回答 2

0

创建一个函数来计算 Q1、Q2 和 Q3:第 25、第 50 和第 75 个百分位数,如下所示:

def percentile(n):
    def percentile_(x):
        return np.percentile(x, n)
    percentile_.__name__ = 'percentile_%s' % n
    return percentile_

现在,您可以使用如下所述的命名聚合来获得所需的计数、总和和 3 个四分位数列。

      df2 = (df.groupby(["Key1", "Key2"])
             .agg(Count=(" Val1", 'count'),    
                  Sum=('Val1','sum'),        
                  Q1= (' Val1',percentile(25), #This is for first quartile
                  Q2= (' Val1',percentile(50), #2nd Quartile
                  Q3= (' Val1',percentile(75)) #This is for Quartile 3

随机例如。

df说是

Key1   Key2  Val1
a       a     1
a       a     2
a       a     3
a       a     4
b       b     5
b       b     6
b       b     7
b       b     8

df2将在键 Key1 和 Key2 上按照 groupby 的要求具有以下列。

Key1 Key2  Count  Sum   Q1  Q2  Q3
 a    a     4     10    1   2.5 3
 b    b     4     6.5   5   6.5 7
于 2020-02-18T14:20:36.850 回答
-1
df2 = df.groupby(['Key1','Key2'])['Val1']
         .agg([('Count','count'), 
               ('Sum','sum'), 
               ('Q1', lambda x: x.quantile(0.25)),
               ('Q2', lambda x: x.quantile(0.5)),
               ('Q3', lambda x: x.quantile(0.75))])
于 2020-02-18T15:42:47.127 回答