Seite 1 von 1

Pandas Spaltenweise addieren

Verfasst: Sonntag 12. Januar 2020, 18:16
von tschaka81
Hallo liebes Forum,

ich suche eine effiziente Methode Spalten aus einem Dataframe miteinander zu kombinieren. Ich habe eine Tabelle deren Spalten zeitweise ein Spektrum darstellen. Die Zeiten sind sehr kurz gewählt worden in der Datenaufnahme, so dass jede Sekunde ein Spektrum (und damit eine Spalte) in einem Dataframe von Pandas vorhanden ist. Ich benötige nicht diese Genauigkeit. Ich würde gerne jetzt eine gewisse Anzahl von Spalten zusammenfassen indem ich die Werte aufsummiere.

Sprich: Ich wähle z.B. n=6 Spalten
Dann würde ich ein
df2['total_score1']=df1[time1] + df1[time2]+ df1[time3]+df1[time4] + df1[time5]+ df1[time6] zusammenfassen können zu einer neuen Spalte.
Das gleiche mache ich dann für Spalte 7 bis 12 usw.

Ich fände diese Lösung äußerst ineffizient. Am liebsten würde ich ein neues Dataframe bauen mit den Ergebnissen der Einzelrechnungen als Spalten. Ich hätte dann also Maximale Spalten vorher / 6 neue Spalten. Kennt ihr hier ein paar Tricks? n (hier die 6) soll variabel bleiben.

In meinem Hauptprogramm habe ich später wohl mehrere 100.000 Spalten, bei welchem der Parameter für n dann natürlich größer werden wird.

Schöne Grüße

Markus

Re: Pandas Spaltenweise addieren

Verfasst: Sonntag 12. Januar 2020, 18:42
von einfachTobi
Was steht denn in den Zeilen? In der Regel nimmt man die Zeit als Index und hat die Messwerte dann zeilenweise in Spalten für z. B. verschiedene Sensoren.
Kannst du dein DataFrame nicht transponieren?

Re: Pandas Spaltenweise addieren

Verfasst: Sonntag 12. Januar 2020, 18:45
von tschaka81
Hallo Tobi,

Ja, das könnte ich. Das hatte ich indirekt (zu meinem besseren Verständnis der Daten) auch gemacht. Aber wie kann mir das bei meinem Problem weiterhelfen?

Schöne Grüße

Markus

Re: Pandas Spaltenweise addieren

Verfasst: Sonntag 12. Januar 2020, 19:36
von einfachTobi
1. Erwartet man die Daten in einer solchen Struktur und
2. kannst du dann sowas machen:

Code: Alles auswählen

N = 6
df.groupby(df.index // N).sum()
Damit fasst du jeweils 6 Zeilen zu einer summierten zusammen.

Re: Pandas Spaltenweise addieren

Verfasst: Sonntag 12. Januar 2020, 20:59
von tschaka81
Mhh, irgendwie funktioniert das nicht bei mir. Ich bekomme da folgenden Fehler:
File "<ipython-input-49-c818881d8bd9>", line 1, in <module>
runfile('/home/mwagner/Projekte/panda/pandatest.py', wdir='/home/mwagner/Projekte/panda')

File "/usr/lib/python3/dist-packages/spyder_kernels/customize/spydercustomize.py", line 678, in runfile
execfile(filename, namespace)

File "/usr/lib/python3/dist-packages/spyder_kernels/customize/spydercustomize.py", line 106, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "/home/mwagner/Projekte/panda/pandatest.py", line 33, in <module>
print(b.transpose().groupby(b.transpose().index // n).sum())

File "/usr/local/lib/python3.7/dist-packages/pandas/core/ops/__init__.py", line 196, in invalid_op
"{typ}".format(name=name, typ=type(self).__name__)

TypeError: cannot perform __floordiv__ with this index type: Index
Ich habe das Problem derzeit so gelöst:

Code: Alles auswählen

n=5
#print(b.transpose().groupby(b.transpose().index // n).sum()) #<-- geht nicht
val=pd.DataFrame()
v = b.transpose().values.tolist()
ke = b.keys().tolist()
z=0
while len(v)>=n:
    zeit = ke[z]
    kk = np.array([0]*len(v[0]))
    for i in range(n):
        kk += np.array(v.pop(0))
        z+=1
    val.insert(0, str(zeit), kk)
     

print(val)   

Re: Pandas Spaltenweise addieren

Verfasst: Sonntag 12. Januar 2020, 21:47
von tschaka81
Ahh, mein Fehler. Ich hatte als Index Strings. Funktioniert also Super.

Danke