Tabellen erzeugen mit Pandas. Datum und Uhrzeit gruppieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
python_versuch
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:41

Hallo,

ich versuche eine Tabelle zu erzeugen in der Art:

Datum | 09:00:00-10:00:00 | 10:00:00-11:00:00 | 11:00:00-12:00:00
01.01.2021 | 10 | 15 | 23
02.01.2021 | 20 | 14 | 17
...

Aus der Datenbank wird vorerst das Datum mit der ersten for-Schleife extrahiert und dann in der zweiten for-Schleife zu jedem Zeitintervall die Vorkommnisse/Zahlen.

Wie kann diese Tabelle mit Pandas realisieren?


Vielen Dank!
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@python_versuch: Erst eine normale Tabelle in ”Langform” erstellen, entsprechend resamplen, gruppieren, und aufsummieren und dann mit `unstack()` in die ”breite Form” bringen. So grob als Idee.

Und ohne irgendwelche ``for``-Schleifen. Dann könnte man sich Pandas auch gleich sparen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
python_versuch
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:41

Ich kann gerade nicht so ganz nachvollziehen, was du meinst.
Ich habe die Daten aktuell in einem Dictionary in der Form:

{
datum_1 : {zeitintervall1: frequenz1}, {zeitintervall2: frequenz2}, ..., {zeitintervall12 : frequenz12}
datum_2: {zeitintervall1: frequenz1}, {zeitintervall2: frequenz2}, ..., {zeitintervall12 : frequenz12}
...
datum_n : {zeitintervall1: frequenz1}, {zeitintervall2: frequenz2}, ..., {zeitintervall12 : frequenz12}
}

Zu einem müssen die Daten in der Tabelle in einer csv-Datei gespeichert werden (das ist soweit erledigt).
Zum anderen möchte ich die Daten weiter verarbeiten (darauf war meine Frage bezogen):
  • Zuerst müssen die durchschnitlichen Frequenz berechnet werden, z.B.:
    Durchschnitt_1 = (Summe aller Fequenzen im Zeitintervall_1) / n, wo n aus datum_n ist.
  • Dann müssen die durchschnittlichen Frequenzen in einem Balkendiagram viasualisiert werden, z.B.:
    Zeitintervall_1 mit Durchschnitt_1 (als Balke), Zeitinterval_2 mit Durchschnitt_2, ... , Zeitintervall_12 mit Durchschnitt_12
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@python_versuch: Du hattest ja geschrieben die Daten kämen aus einer Datenbank — wie liegen die denn dort vor? *Das* ist doch der Ausgangspunkt‽ Von dem die Daten ”normal” in Langform kommen. Und wenn Du zwischen dort und dem was Du aktuell hast ``for``-Schleifen vorkommen, dann ist das ja bereits ”falsch”, weil es Pandas nicht so verwendet wie das vorgesehen ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
python_versuch
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:41

Hallo __blackjack__
Die Daten für die Tabelle/csv wurden aus der Datenbank extrahiert. Das habe ich aber bereits erledigt, in dem ich die Daten erst mal in einem Dictionary, wie oben beschrieben, abgespeichert und dann in eine csv-Datei überführt habe. Nun möchte ich mit Pandas die Tabelle aus der csv-Datei auslesen und weitere Berechnungen, wie oben beschrieben, durchführen.
Grüße
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Aber die gezeigte Datenstruktur kann weder aus der Datenbank direkt kommen, noch als csv gespeichert werden.
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@python_versuch: Also hast Du den ersten Schritt an Pandas vorbei gemacht, obwohl man den auch damit hätte lösen können.

Die Weiterverarbeitung klingt jetzt nicht wirklich kompliziert. Das ist ja einfach nur den Durchschnittswert für alle Spalten bestimmen. Wobei die erste Spalte der Index sein sollte, denn den Durchschnitt von den Datumsangaben will man ja nicht haben. Durchschnitt heisst, je nach dem welchen man konkret will/braucht, auf englisch „mean“ oder „median“. Unter anderem `DataFrame`\s haben da Methoden für.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
python_versuch
User
Beiträge: 9
Registriert: Freitag 5. März 2021, 16:41

Und wie hätte man konkrett den ersten Schritt mit Pandas lösen können? Da habe nichts passendes dazu gefunden.

In Weiterverarbeitung möchte ich den Durchschnitt zu jeder Spalte mit Zeitintervall berechnen, wie genau sieht diese Methode dann aus?
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@python_versuch: Einen Ansatz wie man den ersten Schritt mit Pandas hätte lösen können habe ich bereits skizziert. Konkreter kann man da ohne zu wissen wie die Ausgangsdaten strukturiert waren nicht werden.

Zur Weiterverarbeitung habe ich doch schon gesagt das es da Methoden für gibt und wonach man da in der Dokumentation suchen muss.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten