że dwie tablice 1D NumPy równej długości, id
i data
, gdzie id
jest sekwencją powtarzając uporządkowane liczby całkowite określające podokien na data
. Na przykład,Grupa obciąż lub minut w numpy tablicy
id data
1 2
1 7
1 3
2 8
2 9
2 10
3 1
3 -10
Chciałbym agregować data
grupując na id
i biorąc albo max lub min. W SQL byłoby to typowe zapytanie agregacyjne, takie jak SELECT MAX(data) FROM tablename GROUP BY id ORDER BY id
. Czy istnieje sposób, w jaki mogę uniknąć pętli w języku Python i zrobić to w wektoryzacji, czy też muszę upuścić do C?
Dzięki @Bago, to zapewnia świetną wydajność. Inną rzeczą, która może mi się przydać, jest to, że wygląda na to, że lexsort zawsze umieszcza wartości NaN na końcu okien bocznych. Tak więc, jeśli chcę znaleźć, powiedzmy, maksimum każdego okna z wyłączeniem NaN, mogę odwrócić znak danych, zastosować formułę min, a następnie odwrócić znak ponownie w drodze, z tylko niewielką karą wykonania. Z drugiej strony, jeśli rzeczywiście chcę zwrócić wartość NaN, jeśli w podokiendzie znajduje się NaN, to pozostawiam ją w niezmienionej postaci. – Abiel
Abiel, patrz np.nanmax - max ignoring NaNs – denis
Ładne rozwiązanie. Irytująco jest to czas O (n log n) i pamięć O (n), kiedy wiemy, że można go rozwiązać w pamięci O (n) i pamięci O (k) dla k bin. Być może numpy powinien obsługiwać 'binmax' oraz' bincount'. – joeln