Ostatnie pytanie dotyczące pandy dla początkujących na ten dzień: Jak wygenerować stół dla jednej serii?
Na przykład:
my_series = pandas.Series([1,2,2,3,3,3])
pandas.magical_frequency_function( my_series )
>> {
1 : 1,
2 : 2,
3 : 3
}
Dużo googlowania doprowadziło mnie do Series.describe () i pandas.crosstabs, ale żadna z nich nie robi tego, czego potrzebuję: jedna zmienna liczona według kategorii. Aha, i byłoby miło, gdyby zadziałało dla różnych typów danych: ciągów znaków, intów itp.
.value_counts().sort_index(1)
, aby zapobiec nieznacznemuAttributeError: 'DataFrame' object has no attribute 'value_counts'
pd.value_counts(df.values.ravel())
która zwraca serię, której atrybutyindex
ivalues
zawierają odpowiednio unikalne elementy i ich liczby.Możesz użyć funkcji rozumienia list w ramce danych, aby policzyć częstotliwości kolumn jako takich
Awaria:
źródło
Odpowiedź udzielona przez @DSM jest prosta i nieskomplikowana, ale pomyślałem, że dodam własny wkład do tego pytania. Jeśli spojrzysz na kod pandy.value_counts , zobaczysz, że dużo się dzieje.
Jeśli musisz obliczyć częstotliwość wielu serii, może to chwilę potrwać. Szybszą implementacją byłoby użycie numpy.unique z
return_counts = True
Oto przykład:
Zwróć uwagę, że zwrócony przedmiot to pandy. Seria
Dla porównania
numpy.unique
zwraca krotkę zawierającą dwa elementy, unikalne wartości i liczby.Następnie możesz połączyć je w słownik:
A następnie do
pandas.Series
źródło
dla rozkładu częstości zmiennej o nadmiernych wartościach można zwinąć wartości w klasach,
Tutaj mam nadmierne wartości dla
employrate
zmiennej i nie ma znaczenia jej rozkład częstotliwości z bezpośrednimvalues_count(normalize=True)
rozkład częstotliwości
values_count(normalize=True)
bez klasyfikacji, długość wyniku tutaj wynosi 139 (wydaje się bez znaczenia jako rozkład częstotliwości):stawiając klasyfikację umieszczamy wszystkie wartości w pewnym przedziale tj.
po klasyfikacji mamy wyraźny rozkład częstotliwości. tutaj możemy łatwo zauważyć, że
37.64%
w krajach wskaźnik zatrudnienia pomiędzy,51-60%
a11.79%
krajów ma wskaźnik zatrudnienia pomiędzy71-80%
źródło