Как бы я сделал эти фрагменты в группе агрегатов более программным? - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно было установить 3 разные функции для срезов, которые я хотел включить наряду с подсчетом, средним, медианным совокупным вызовом. Есть ли более простой способ?

def from_0_up_to_6(x):
    return (x < 6).sum()
def from_6_up_to_12(y):
    return ((y >= 6) & (y < 12)).sum()
def from_12_and_up(z):
    return (z >= 12).sum()

MonthsUntilBUGift = df.groupby('BusinessUnit').agg({'MonthsTillBUGift': ['mean','count','median'
                                                                        , from_0_up_to_6
                                                                        , from_6_up_to_12
                                                                        , from_12_and_up
                                                                        ]})

Желаемые результаты - это хорошо, но меня беспокоит, когда заинтересованные стороны решают переопределить диапазоны / срезы, что может свести меня с ума.

1 Ответ

0 голосов
/ 21 июня 2019
from functools import partial

bounds = [0, 6, 12, float('inf')]


def agg(lower, upper, x):
    return ((lower <= x) & (x < upper)).sum()


aggs = [
    partial(agg, lower, upper)
    for lower, upper in zip(bounds, bounds[1:])
]

print(aggs)
# [functools.partial(<function agg at 0x10afad7b8>, 0, 6), functools.partial(<function agg at 0x10afad7b8>, 6, 12), functools.partial(<function agg at 0x10afad7b8>, 12, inf)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...