Я пытаюсь очистить и упростить мой код и недавно столкнулся с именованным агрегированием в Pandas ( см. Ссылку )
Это примечание на странице:
Если вашим функциям агрегации требуются дополнительные аргументы, частично примените их с помощью functools.partial ().
Вот установочный код:
from functools import partial as fpart
import pandas as pd
import numpy as np
inputData = {'groupByVar1':['a','a','a','a','a','a','a','a','a','a','b','b','b','b','b','b','b','b','b','b'],
'groupByVar2':[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
'value':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]}
df = pd.DataFrame(inputData)
upperPercentile = 0.98
lowerPercentile=0.05
Вот метод, который я использовал
nsgdf = df.groupby(['groupByVar1','groupByVar2'])[['value']].quantile(upperPercentile).rename({'value':'upperPercentileValue'},axis=1).reset_index(drop=False)
nsgdf['lowerPercentileValue'] = df.groupby(['groupByVar1','groupByVar2'])[['value']].quantile(lowerPercentile).values
Вот метод, который я хотел бы использовать:
fpartUpper = fpart(np.quantile,q=upperPercentile)
fpartLower = fpart(np.quantile,q=lowerPercentile)
bdf = df.groupby(['groupByVar1','groupByVar2']).agg(
upperPercentileValue=pd.NamedAgg(column='value',aggfunc=fpartUpper),
lowerPercentileValue=pd.NamedAgg(column='value',aggfunc=fpartLower)
)
Следующая ошибка возвращается из Pandas:
pandas .core.base.SpecificationError: Имена функций должны быть уникальными, найдено несколько именованных квантилей
Однако, если я выполню следующее, я действительно получу результат:
fpartUpper([1,2,3,4,5])
Out[16]: 4.92
Как мне заставить этот конкретный метод работать с pandas? Что мне не хватает? Почему Pandas находит несколько определений для квантиля, тогда как запуск пустой функции не вызывает проблем?