Mam df, który należy zgrupować, przefiltrować, zmodyfikować i zastosować niestandardową funkcję. Moje "normalne" podejście jest powolne, a nie najbardziej eleganckie!Pandy: najbardziej efektywny sposób na zastosowanie złożonej funkcji w całej ramce danych
[name] [cnt] [num] [place] [y]
AAAA 12 20182.0 5.0 1.75
BBBB 12 20182.0 7.0 2.00
AAAA 10 20381.0 10.0 9.25
BBBB 10 20381.0 12.0 18.75
EEEE 12 21335.0 1.0 0.00
RRRR 12 21335.0 8.0 3.00
CCCC 12 21335.0 9.0 3.50
muszę grupy DF na [num] czyli:
[name] [cnt] [num] [place] [y]
AAAA 12 20182.0 5.0 1.75
BBBB 12 20182.0 7.0 2.00
Dla każdej z tych grup należy zrobić trzy zadania:
I. odfiltrować wszystkie wiersze wewnątrz jednego grupa o tej samej wartości [y]. Grupy mogą składać się z maksymalnie 6 wartości.
II. Utwórz wszystkie możliwe podzbiory, o długości dwóch, dla [miejsce]: (5,7) i (7,5)
III. Zastosuj funkcję niestandardową do każdego podzbioru:
def func(p1, p2):
diff_p = p2-p1
if diff_p > 0:
return 2/(diff_p * p2)
else:
return p1/(diff_p * 12)
Gdzie p1 = pierwsze miejsce krotki; p2 = drugie miejsce krotki; 12 to wartość z kolumny [cnt]. Co daje w grupie przykład:
[name] [cnt] [num] [place] [y] [desired]
AAAA 12 20182.0 5.0 1.75 0.1428571429
BBBB 12 20182.0 7.0 2.00 -0.2916666667
aaaa za [życzenia] kolumna posiada średni wynik funkcji „zwyczaj” wszystkich podzbiorów gdzie wartość miejsce AAAA jest pierwszą częścią krotki. Co jest tylko jedną krotką w tym przykładzie.
(Ale jak wymienione grupy może składać się maksymalnie z 6 wartości, które będą tworzyć wiele krotki gdzie miejsce AAAA jest pierwsza wartość)
Moje obecne podejście jest zrobić
DF. GroupBy ('num') stosuje się (...)
zastosować zrobi.
.drop_ duplikaty ('y', zachować = False)
lista (itertools.permutations (df_grp.place.values, 2))
zastosować funkcję niestandardową
.mean()
Po pewnym czasie staje się naprawdę bardzo powolny, ponieważ pierwszy df jest wynikiem działania innego .groupby(). Apply() zadzwoń
"Odfiltruj wszystkie wiersze w obrębie jednej grupy o tej samej wartości [y]". W jaki sposób decydujesz, które z duplikatów zachować, a które odrzucić (np. Te same wartości liczbowe i y, ale inne wartości miejsc)? Podobnie, w jaki sposób decydujesz, które z nich zachować, jeśli w grupie jest więcej niż 6? Możesz zepsuć ten problem na mniejsze kawałki. – Alexander