HINWEIS: Suchen Sie nach Hilfe für eine effiziente Möglichkeit, dies neben einem Mega-Join zu tun und dann den Unterschied zwischen den Daten zu berechnen
Ich habe table1
mit Länder-ID und einem Datum (keine Duplikate dieser Werte) und möchte table2
information zusammenfassen (mit Land, Datum, cluster_x und einer count-Variablen, wobei cluster_x cluster_1, cluster_2, cluster_3), so dass table1
jedem Wert der Cluster-ID und der zusammengefassten Anzahl von table2
angehängt hat, wobei das Datum von table2
innerhalb von 30 Tagen vor dem Datum in table1
aufgetreten ist.
Ich glaube, das ist in SQL einfach: Wie geht das bei Pandas?
%Vor%BEARBEITEN:
Hier ist ein etwas verändertes Beispiel. Angenommen, dies ist Tabelle1, ein aggregierter Datensatz mit Datum, Ort, Cluster und Anzahl. Darunter befindet sich der Datensatz "query" (table2). In diesem Fall wollen wir das count-Feld aus Tabelle1 für cluster1, cluster2, cluster3 (es gibt tatsächlich 100) zu der Länder-ID summieren, solange das Datumsfeld in Tabelle1 innerhalb von 30 Tagen liegt.
So hat beispielsweise die erste Zeile des Abfrage-Datasets das Datum 2/2/2015 und Land 1. In Tabelle 1 gibt es nur eine Zeile innerhalb von 30 Tagen und für Cluster 2 mit der Anzahl 2.
Hier ist ein Dump der beiden Tabellen in CSV:
%Vor%und table2:
%Vor%Edit: Oop - ich wünschte, ich hätte diese Änderung über den Beitritt vor dem Senden gesehen. Np, ich werde das so lassen, wie es Spaß gemacht hat. Kritik willkommen.
Wo table1 und table2 im gleichen Verzeichnis wie dieses Skript bei "table1.csv" und "table2.csv" liegen, sollte dies funktionieren.
Ich habe nicht das gleiche Ergebnis wie Ihre Beispiele mit 30 Tagen - musste es auf 31 Tage stoßen, aber ich denke, der Geist ist hier:
%Vor%Meine Testausgabe:
%Vor%...
%Vor%UPDATE:
Ich denke, es macht wenig Sinn, Pandas für die Verarbeitung von Daten zu verwenden, die nicht in Ihren Speicher passen. Natürlich gibt es einige Tricks, wie man damit umgeht, aber es ist schmerzhaft.
Wenn Sie Ihre Daten effizient verarbeiten möchten, sollten Sie dafür ein geeignetes Tool verwenden.
Ich würde empfehlen, sich Apache Spark SQL genauer anzusehen, wo Sie können Verarbeiten Sie Ihre verteilte Daten auf mehreren Cluster-Knoten, mit viel mehr Speicher / Prozessorleistung / IO / etc. verglichen mit einem Computer / IO Subsystem / CPU Pandas Ansatz.
Alternativ können Sie versuchen RDBMS wie Oracle DB (sehr teuer , insbesondere Softwarelizenzen! und ihre kostenlose Version ist voller Einschränkungen) oder kostenlose Alternativen wie PostgreSQL (kann nicht viel dazu sagen, wegen fehlender Erfahrung) oder MySQL (nicht so mächtig im Vergleich zu Oracle; zum Beispiel gibt es keine native / klare Lösung für dynamisches Pivotieren, die Sie wahrscheinlich verwenden möchten, etc.)
ALTE Antwort:
Sie können es so machen (bitte finden Sie Erklärungen als Kommentare im Code):
%Vor%Ausgabe (für meine Datensätze):
%Vor%