Eine letzte Frage für Pandas-Neulinge an diesem Tag: Wie erstelle ich eine Tabelle für eine einzelne Serie?
Beispielsweise:
my_series = pandas.Series([1,2,2,3,3,3])
pandas.magical_frequency_function( my_series )
>> {
1 : 1,
2 : 2,
3 : 3
}
Viel googeln hat mich zu Series.describe () und pandas.crosstabs geführt, aber keines von beiden macht genau das, was ich brauche: eine Variable, die nach Kategorien zählt. Oh, und es wäre schön, wenn es für verschiedene Datentypen funktionieren würde: Zeichenfolgen, Ints usw.
.value_counts().sort_index(1)
, um zu verhindern, dass die erste Spalte möglicherweise leicht außer BetriebAttributeError: 'DataFrame' object has no attribute 'value_counts'
pd.value_counts(df.values.ravel())
die eine Reihe zurückgibt, derenindex
undvalues
Attribute die eindeutigen Elemente bzw. deren Anzahl enthalten.Sie können das Listenverständnis in einem Datenrahmen verwenden, um die Häufigkeit der Spalten als solche zu zählen
Nervenzusammenbruch:
quelle
Die Antwort von @DSM ist einfach und unkompliziert, aber ich dachte, ich würde dieser Frage meine eigene Eingabe hinzufügen. Wenn Sie sich den Code für pandas.value_counts ansehen , werden Sie feststellen , dass viel los ist.
Wenn Sie die Häufigkeit vieler Serien berechnen müssen, kann dies eine Weile dauern. Eine schnellere Implementierung wäre die Verwendung von numpy.unique mit
return_counts = True
Hier ist ein Beispiel:
Beachten Sie hier, dass es sich bei dem zurückgegebenen Artikel um eine Pandas.Series handelt
Im Vergleich dazu wird
numpy.unique
ein Tupel mit zwei Elementen zurückgegeben, den eindeutigen Werten und den Zählwerten.Sie können diese dann zu einem Wörterbuch kombinieren:
Und dann in eine
pandas.Series
quelle
Für die Häufigkeitsverteilung einer Variablen mit übermäßigen Werten können Sie die Werte in Klassen reduzieren.
Hier habe ich übermäßige Werte für
employrate
Variablen, und es gibt keine Bedeutung für die Häufigkeitsverteilung mit direktenvalues_count(normalize=True)
Häufigkeitsverteilung
values_count(normalize=True)
ohne Klassifizierung, die Länge des Ergebnisses beträgt hier 139 (scheint als Häufigkeitsverteilung bedeutungslos zu sein):Bei der Klassifizierung setzen wir alle Werte mit einem bestimmten Bereich, dh.
Nach der Klassifizierung haben wir eine klare Häufigkeitsverteilung. hier können wir leicht sehen, dass
37.64%
von Ländern Beschäftigungsquote zwischen51-60%
und11.79%
von Ländern Beschäftigungsquote zwischen haben71-80%
quelle