Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Vorkommen von Begriffen in Pandas DataFrames effizient nach ID und Gruppe gruppieren und zählen, ohne Schleifen zu verwenden?

Wie kann ich Vorkommen von Begriffen in Pandas DataFrames effizient nach ID und Gruppe gruppieren und zählen, ohne Schleifen zu verwenden?

DDD
DDDOriginal
2024-11-29 00:01:12598Durchsuche

How can I efficiently group and count occurrences of terms within Pandas DataFrames by ID and group without using loops?

Gruppieren und Zählen von Werten in Pandas DataFrames

Bei der Datenanalyse ist es oft notwendig, Daten zu gruppieren und das Vorkommen bestimmter Werte oder Begriffe zu zählen. Diese Art der Aggregation lässt sich leicht mit den Funktionen „groupby“ und „size“ in Pandas erreichen.

Problem:

Angenommen, Sie haben einen DataFrame df mit den folgenden Spalten: id, Gruppe und Begriff. Das Ziel besteht darin, die Anzahl der Vorkommen jedes eindeutigen Begriffs für jede Kombination aus ID und Gruppe zu zählen, ohne Schleifen zu verwenden.

Lösung:

Um dies zu erreichen, haben wir können die folgenden Schritte verwenden:

  1. Gruppieren nach: Gruppieren Sie den DataFrame nach den drei Spalten mit groupby(['id', 'group', 'term']). Dadurch werden die Daten basierend auf den eindeutigen Kombinationen dieser Spalten in Gruppen unterteilt.
  2. Größe: Wenden Sie die Größenfunktion auf die gruppierten Daten an. size berechnet die Anzahl der Zeilen in jeder Gruppe, wodurch effektiv die Anzahl der Vorkommen jedes eindeutigen Begriffs innerhalb jedes ID-Gruppen-Paares gezählt wird.
  3. Entstapeln: Das Ergebnis der Groupby-Operation ist a hierarchischer Index. Um eine Tabelle mit Zeilen zu erstellen, die ID-Gruppen-Paare darstellen, und Spalten, die eindeutige Begriffe darstellen, können wir unstack(fill_value=0) verwenden. Dadurch wird der hierarchische Index entstapelt und alle fehlenden Werte mit 0 gefüllt.

Der resultierende DataFrame ähnelt diesem Layout:

Bildbeschreibung hier eingeben

Beispielcode:

df = pd.DataFrame([
    (1, 1, 'term1'),
    (1, 2, 'term2'),
    (1, 1, 'term1'),
    (1, 1, 'term2'),
    (2, 2, 'term3'),
    (2, 3, 'term1'),
    (2, 2, 'term1')
], columns=['id', 'group', 'term'])

result = df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)

print(result)

Ausgabe:

   term1  term2  term3
id group             
1   1      2      1
2   2      2      1
   3      1      0

Leistung:

Bei großen Datensätzen können die Vorgänge „groupby“ und „size“ ausgeführt werden rechenintensiv sein. Der folgende Code stellt Zeitstatistiken zum Gruppieren und Zählen auf einem DataFrame mit 1.000.000 Zeilen bereit:

df = pd.DataFrame(dict(id=np.random.choice(100, 1000000),
                       group=np.random.choice(20, 1000000),
                       term=np.random.choice(10, 1000000)))

%timeit df.groupby(['id', 'group', 'term']).size().unstack(fill_value=0)

Das obige ist der detaillierte Inhalt vonWie kann ich Vorkommen von Begriffen in Pandas DataFrames effizient nach ID und Gruppe gruppieren und zählen, ohne Schleifen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn