panda Frage zum Berechnen von kumulativen Summen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
lalelu169
User
Beiträge: 12
Registriert: Dienstag 7. April 2020, 10:56

Hallihallo,

bin Anfänger in pandas und habe es geschafft die folgende Datenstruktur zu erschaffen

Code: Alles auswählen

             S1        S2        S3        S4        S5        S6       S7
ZugNr                                                                     
2      (-30, 3)   (20, 2)   (20, 4)   (30, 1)   (30, 5)   (40, 0)  (40, 6)
2      (-30, 4)  (-20, 3)    (0, 2)   (10, 1)   (10, 5)   (20, 0)  (20, 6)
2      (-30, 3)   (20, 2)   (20, 4)   (30, 1)   (30, 5)   (40, 0)  (40, 6)
2      (-30, 3)  (-20, 1)  (-10, 2)  (-10, 4)    (0, 5)   (10, 0)  (10, 6)
2      (-30, 3)  (-20, 1)  (-10, 2)  (-10, 4)    (0, 5)   (10, 0)  (10, 6)
2      (-40, 3)  (-20, 2)  (-20, 4)  (-10, 0)  (-10, 1)  (-10, 5)   (0, 6)
2      (-30, 2)  (-20, 3)    (0, 4)   (10, 1)   (10, 5)   (20, 0)  (20, 6)
2      (-30, 3)  (-20, 1)  (-10, 2)  (-10, 4)    (0, 5)   (10, 0)  (10, 6)
2      (-30, 3)  (-20, 1)  (-10, 2)  (-10, 4)    (0, 5)   (10, 0)  (10, 6)
2      (-30, 3)  (-20, 1)  (-10, 2)  (-10, 4)    (0, 5)   (10, 0)  (10, 6)
Wie kann ich die ersten Zahlen in dem Tupel addieren?
Vielen Dank
einfachTobi
User
Beiträge: 510
Registriert: Mittwoch 13. November 2019, 08:38

In welchem Tupel? Spaltenweise? Zeilenweise?
Grundsätzlich: https://pandas.pydata.org/pandas-docs/s ... e.sum.html. Für kumulative Summen: https://pandas.pydata.org/pandas-docs/s ... umsum.html.
Vermutlich ist es hilfreich die Werte nicht als Tupel sondern via Multiindex oder in einzelnen Spalten abzulegen.
lalelu169
User
Beiträge: 12
Registriert: Dienstag 7. April 2020, 10:56

Danke Tobi für die Antwort,

Eine Zeile besteht bei mir aus einer int und 7 Tupeln.
Es ist mir inzwischen auch klar geworden, dass es möglicherweise besser ist die Werte in einzelnen Spalten abzulegen.

Aber ich krieg das leider nicht hin. Wie kann ich denn auf die einzelnen Werte in den Tuopel zugreifen?
Vielen Dank
einfachTobi
User
Beiträge: 510
Registriert: Mittwoch 13. November 2019, 08:38

Meine Frage nach ob zeilen- oder spaltenweise bezog sich auf die Summenbildung. Aber das ist auch in der Doku beschrieben und funktioniert sehr gut, wenn die abgelegten Daten keine Tupel sind. Bei Tupeln fällt mir gerade keine gute Möglichkeit ein, außer selbst über das DataFrame zu iterieren - was genau das wäre, was man mit einem DataFrame vermeiden will. Hier ein Beispiel wie es dann aussehen könnte:

Code: Alles auswählen

import pandas as pd
df = pd.DataFrame({"S1_1": [-30, -30],
                   "S1_2": [3, 4],
                   "S2_1": [20, -20],
                   "S2_2": [2, 3]})
print("Summen spaltenweise:)
print(f"S1_1:\t{df.S1_1.sum()}")
print(f"S1_2:\t{df.S1_2.sum()}")
print(f"S2_1:\t{df.S2_1.sum()}")
print(f"S2_2:\t{df.S2_2.sum()}")
print(f"Summen zeilenweise:\n{df.sum(axis=1)}")
Benutzeravatar
DeaD_EyE
User
Beiträge: 1206
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Code: Alles auswählen

cols = "ZugNr S1 S2 S3 S4 S5 S6 S7".split()
data = [
    (2, (-30, 3), (20, 2),  (20, 4),   (30, 1),   (30, 5),  (40, 0), (40, 6)),
    (2, (-30, 4), (-20, 3), (0, 2),    (10, 1),   (10, 5),  (20, 0), (20, 6)),
    (2, (-30, 3), (20, 2),  (20, 4),   (30, 1),   (30, 5),  (40, 0), (40, 6)),
    (2, (-30, 3), (-20, 1), (-10, 2),  (-10, 4),  (0, 5),   (10, 0), (10, 6)),
    (2, (-30, 3), (-20, 1), (-10, 2),  (-10, 4),  (0, 5),   (10, 0), (10, 6)),
    (2, (-40, 3), (-20, 2), (-20, 4),  (-10, 0),  (-10, 1), (-10, 5), (0, 6)),
    (2, (-30, 2), (-20, 3), (0, 4),    (10, 1),   (10, 5),  (20, 0),  (20, 6)),
    (2, (-30, 3), (-20, 1), (-10, 2),  (-10, 4),  (0, 5),   (10, 0),  (10, 6)),
    (2, (-30, 3), (-20, 1), (-10, 2),  (-10, 4),  (0, 5),   (10, 0),  (10, 6)),
    (2, (-30, 3), (-20, 1), (-10, 2),  (-10, 4),  (0, 5),   (10, 0),  (10, 6)),
    ]
df = pd.DataFrame(data=data, columns=cols)
df.loc[:, "S1":] = df.loc[:, "S1":].apply(lambda x: [sum(y) for y in x])
Ich glaube das macht das was du willst.
Wichtig ist der Teil mit apply.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
lalelu169
User
Beiträge: 12
Registriert: Dienstag 7. April 2020, 10:56

super. Vielen Dank
Antworten