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
Pandas Spaltenweise addieren
-
- User
- Beiträge: 512
- Registriert: Mittwoch 13. November 2019, 08:38
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?
Kannst du dein DataFrame nicht transponieren?
-
- User
- Beiträge: 512
- Registriert: Mittwoch 13. November 2019, 08:38
1. Erwartet man die Daten in einer solchen Struktur und
2. kannst du dann sowas machen:
Damit fasst du jeweils 6 Zeilen zu einer summierten zusammen.
2. kannst du dann sowas machen:
Code: Alles auswählen
N = 6
df.groupby(df.index // N).sum()
Mhh, irgendwie funktioniert das nicht bei mir. Ich bekomme da folgenden Fehler:
Ich habe das Problem derzeit so gelöst: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
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)