Chcę wydrukować wynik grupowania z Pandami.
Mam ramkę danych:
import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})
print(df)
A B
0 one 0
1 one 1
2 two 2
3 three 3
4 three 4
5 one 5
Podczas drukowania po pogrupowaniu według „A” mam:
print(df.groupby('A'))
<pandas.core.groupby.DataFrameGroupBy object at 0x05416E90>
Jak mogę wydrukować zgrupowane ramki danych?
Jeśli zrobię:
print(df.groupby('A').head())
Otrzymuję ramkę danych tak, jakby nie była zgrupowana:
A B
A
one 0 one 0
1 one 1
two 2 two 2
three 3 three 3
4 three 4
one 5 one 5
Spodziewałem się czegoś takiego:
A B
A
one 0 one 0
1 one 1
5 one 5
two 2 two 2
three 3 three 3
4 three 4
print df.groupby('A').head()
. jaką masz wersję pand?df.groupby(['A', 'B']).sum()
, ale zawiodłoby, gdyby('A', 'B')
pary nie były unikalne.Odpowiedzi:
Po prostu zrób:
To też działa,
W celu selektywnego grupowania kluczy: Wstaw żądane klucze do
key_list_from_gb
, w następujący sposób, używającgb.keys()
: Na przykład,źródło
for A in d['A'].unique(): print(A, df.query(f'A == "{A}"'))
key_list_from_gb
?Jeśli po prostu szukasz sposobu na wyświetlenie tego, możesz użyć opisywania ():
To daje schludny stół.
źródło
Potwierdziłem, że zachowanie
head()
zmian między wersją 0.12 a 0.13. Dla mnie to wygląda na błąd. Stworzyłem problem .Ale operacja grupowania w rzeczywistości nie zwraca elementu DataFrame posortowanego według grupy.
.head()
Metoda jest trochę mylące tutaj - to tylko funkcja umożliwiająca pozwolić ci ponownego zbadania obiekcie (w tym przypadkudf
), które grupowane. Rezultatemgroupby
jest odrębny rodzaj obiektu,GroupBy
przedmiot. Musiszapply
,transform
lubfilter
wrócić do DataFrame lub serialu.Jeśli wszystko, co chciałeś zrobić, to posortować według wartości w kolumnach A, powinieneś użyć
df.sort('A')
.źródło
head
faktycznie robihead(5)
to tak, że pokazuje pierwsze 5 wierszy, bardziej poprawne jest „pokazanie” ramkidf.groupby('A').apply(lambda x: x)
, co jest faktycznie przejściem. Przypuszczam, że mógłbyś miećpass()
metodę.Kolejna prosta alternatywa:
źródło
Ponadto inną prostą alternatywą może być:
źródło
Oprócz poprzednich odpowiedzi:
Biorąc twój przykład,
Następnie prosty 1-wierszowy kod
źródło
Dzięki Surya za dobre spostrzeżenia. Oczyściłbym jego rozwiązanie i po prostu zrobiłbym:
źródło
Lista wywołań () w obiekcie GroupBy
daje Ci:
źródło
nie możesz zobaczyć danych groupBy bezpośrednio za pomocą instrukcji print ale możesz zobaczyć iterując po grupie za pomocą pętli for wypróbuj ten kod, aby zobaczyć grupę według danych
otrzymasz wynik po wypróbowaniu tego jako wynik grupowania
Mam nadzieję, że to pomoże
źródło
W Jupyter Notebook, jeśli wykonasz następujące czynności, wydrukuje ładną zgrupowaną wersję obiektu.
apply
Metoda pomaga w tworzeniu multiindex dataframe.Wynik:
Jeśli chcesz, aby
by
kolumny nie pojawiały się w wynikach, po prostu upuść kolumny, w ten sposób.Wynik:
Tutaj nie jestem pewien, dlaczego
.iloc[:]
nie działa zamiast[:]
na końcu. Tak więc, jeśli w przyszłości pojawią się problemy z powodu aktualizacji (lub obecnie),.iloc[:len(a)]
również działa.źródło
Znalazłem trudny sposób, tylko na burzę mózgów, zobacz kod:
wyjście:
Zalety są tak łatwe do wydrukowania, że zwraca ramkę danych zamiast Groupby Object. A wyjście wygląda ładnie. Chociaż wadą jest to, że tworzy serię nadmiarowych danych.
źródło
W Pythonie 3
W bardziej interaktywny sposób
źródło
df.groupby ('klucz, według którego chcesz pogrupować'). zastosuj (drukuj)
Jak wspomniał inny członek, jest to najłatwiejsze i najprostsze rozwiązanie do wizualizacji obiektu grupowego.
źródło
aby wydrukować wszystkie (lub dowolnie wiele) wierszy zgrupowanego df:
źródło