Mam ramkę danych df
i używam z niej kilku kolumn do groupby
:
df['col1','col2','col3','col4'].groupby(['col1','col2']).mean()
W powyższy sposób prawie otrzymuję potrzebną tabelę (ramkę danych). Brakuje dodatkowej kolumny, która zawiera liczbę wierszy w każdej grupie. Innymi słowy, mam na myśli, ale chciałbym również wiedzieć, ile liczb wykorzystano do uzyskania tych środków. Na przykład w pierwszej grupie jest 8 wartości, w drugiej 10 i tak dalej.
W skrócie: Jak uzyskać statystyki grupowe dla ramki danych?
df[['col1','col2','col3','col4']].groupby(['col1','col2']).agg(['mean', 'count'])
count
kolumnę na grupę.result = df['col1','col2','col3','col4'].groupby(['col1', 'col2']).mean() ; counts = times.groupby(['col1', 'col2']).size() ; result['count'] = counts
Szybka odpowiedź:
Najprostszym sposobem uzyskania liczby wierszy na grupę jest wywołanie
.size()
, które zwracaSeries
:Zwykle chcesz ten wynik jako
DataFrame
(zamiast aSeries
), dzięki czemu możesz:Jeśli chcesz dowiedzieć się, jak obliczyć liczbę wierszy i inne statystyki dla każdej grupy, czytaj dalej poniżej.
Szczegółowy przykład:
Rozważ następujący przykładowy frameframe:
Najpierw użyjmy,
.size()
aby uzyskać liczbę wierszy:Następnie użyjmy,
.size().reset_index(name='counts')
aby uzyskać liczbę wierszy:W tym wyniki dla większej liczby statystyk
Gdy chcesz obliczyć statystyki zgrupowanych danych, zwykle wygląda to tak:
Powyższy wynik jest trochę irytujący ze względu na zagnieżdżone etykiety kolumn, a także dlatego, że liczba wierszy dotyczy poszczególnych kolumn.
Aby uzyskać większą kontrolę nad danymi wyjściowymi, zwykle dzielę statystyki na poszczególne agregacje, które następnie łączę za pomocą
join
. To wygląda tak:Przypisy
Kod użyty do wygenerowania danych testowych pokazano poniżej:
Zrzeczenie się:
Jeśli niektóre kolumny, które agregujesz, mają wartości null, naprawdę chcesz spojrzeć na wiersze grupy jako niezależne agregowanie dla każdej kolumny. W przeciwnym razie możesz zostać wprowadzony w błąd co do tego, ile rekordów faktycznie używa się do obliczania rzeczy takich jak średnia, ponieważ pandy będą
NaN
zapisywać wpisy w obliczeniach średnich, nie mówiąc ci o tym.źródło
In [5]: counts_df = pd.DataFrame(df.groupby('col1').size().rename('counts'))
może lepiej ustawić rozmiar () jako nową kolumnę, jeśli chcesz manipulować ramką danych w celu dalszej analizy, która powinna byćcounts_df = pd.DataFrame(df.groupby('col1').size().reset_index(name='counts')
isnull
do tego zapytania, aby mieć je również w jednej kolumnie?'col4': ['median', 'min', 'count', 'isnull']
Jedna funkcja, aby rządzić nimi wszystkimi:
GroupBy.describe
Powroty
count
,mean
,std
, i inne przydatne statystyki per-grupy.Aby uzyskać określone statystyki, wystarczy je wybrać,
describe
działa dla wielu kolumn (zmień['C']
na['C', 'D']
- lub usuń go całkowicie - i zobacz, co się stanie, wynikiem jest ramka danych z kolumną MultiIndexed).Otrzymujesz także różne statystyki dla danych ciągów. Oto przykład
Aby uzyskać więcej informacji, zobacz dokumentację .
źródło
Możemy to łatwo zrobić, używając funkcji grupowania i liczenia. Ale powinniśmy pamiętać, aby użyć reset_index ().
źródło
Aby uzyskać wiele statystyk, zwinąć indeks i zachować nazwy kolumn:
Produkuje:
źródło
Utwórz obiekt grupy i wywołaj metody takie jak poniżej:
źródło
Spróbuj tego kodu
Myślę, że kod doda kolumnę o nazwie „policz to”, która liczy każdą grupę
źródło