Квартили и другие параметры в групповом режиме на нескольких клавишах в pandas python - PullRequest
0 голосов
/ 18 февраля 2020

df столбцы, как показано ниже:

  Key1   Key2   Val1  

Требуется вывод Я хочу групповой вывод, где столбец Val1 имеет значения, сгруппированные вместе с groupby в python на клавишах Key1 и Key2 .

Ожидаемый вывод: df2 [groupby на key1 и key2]

Key1 Key2 Val1  Count Sum Q1  Q2  Q3

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020
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))])
0 голосов
/ 18 февраля 2020

Создание функции для вычисления Q1, Q2 и Q3: 25-й, 50-й и 75-й процентили , как показано ниже:

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

Теперь вы можете использовать именованную агрегацию как упомянуто ниже, чтобы получить число, сумму и три квартильных столбца, как вы хотите.

      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.

Key1 Key2  Count  Sum   Q1  Q2  Q3
 a    a     4     10    1   2.5 3
 b    b     4     6.5   5   6.5 7
...