Создание функции для вычисления 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