Wie soll ich eine Tabelle von Daten strukturieren und auf sie zugreifen, damit ich Teilmengen in Python 3.5 leicht vergleichen kann?

8
  1. Gibt es eine schnellere, pythischere Art, dies zu tun?
  2. Was ist? Diese Warnung wird generiert UserWarning: Boolean Series key will be reindexed to match DataFrame index. "DataFrame index.", UserWarning und sollte ich mich darum kümmern?

Ich habe eine CSV-Datei mit drei Spalten: org, month, person.

%Vor%

Was ich in pandas.core.frame.DataFrame mit gelesen habe:

%Vor%

Das Endziel ist es, die Schnittmenge von Personen zwischen zwei aufeinanderfolgenden Perioden mit der Gruppe von Personen in der ersten Periode zu vergleichen.

%Vor%

Bearbeiten: Ich habe es mit zu arbeiten:

%Vor%

Was eine Ausgabe wie folgt erzeugt:

%Vor%

Aber es ist wirklich langsam und irgendwie hässlich ... bei der derzeitigen Rate schätzt meine Umschlagsberechnung es auf ungefähr 22 Stunden für einen 2-Jahres-Datenstapel.

    
zhespelt 22.02.2016, 19:44
quelle

2 Antworten

3

Zugegeben, ich habe noch nie Pandas benutzt, also ist das vielleicht nicht idiomatisch. Dies verwendet nur grundlegende Python-Strukturen.

%Vor%

Dies erstellt eine "im Cache gespeicherte" Nachschlagetabelle in org_month_dict , die nach Organisation und Monat indiziert ist. Dadurch ersparen Sie sich die teure Suche nach data[data.org == _org][data.month == _m1] in Ihrer inneren Schleife. Es sollte deutlich schneller als Ihr ursprünglicher Code laufen.

    
nneonneo 23.02.2016, 00:23
quelle
1

Ich würde Pandas hier nicht unbedingt entlassen. Es hängt von ein paar Dingen ab. Ich denke nicht, dass Pandas eine sehr kompakte Art sind, Ihre Daten zu speichern, obwohl es automatische Komprimierung und sparsame Speicheroptionen hat, die dies weitgehend abschwächen. Ich würde erwarten, dass die Geschwindigkeit ziemlich vernünftig ist, aber Sie müssten es wirklich auf Ihre Daten testen, um es sicher zu sagen.

Es bietet (meiner Meinung nach) eine bequemere Möglichkeit, Ihre Daten zu speichern, und bietet auch bequeme Möglichkeiten, mit Daten umzugehen. Und wenn Sie fertig sind, können Sie Ergebnisse in Tabellenform ausgeben.

Zuerst werde ich die Daten ein wenig erweitern, um die Probleme besser zu demonstrieren.

%Vor%

Dann könnten Sie so etwas tun:

%Vor%

Ich ignoriere einige Details hier, wie den Breakpoint zwischen Org 1 und Org 2, aber Sie könnten eine Gruppe hinzufügen, um damit umzugehen. In ähnlicher Weise möchten Sie möglicherweise Code hinzufügen, um Tage ohne anwesende Person zu behandeln, und es gibt Möglichkeiten, damit auch umzugehen.

    
JohnE 23.02.2016 02:48
quelle