Page 1 of 1

Umformen Sie das Wörterbuch, um eine Geigenhandlung zu erstellen

Posted: 14 Jan 2025, 14:06
by Guest
Ich habe einige Daten, die in einem Wörterbuch mit Datenrahmen gespeichert sind. Die realen Daten sind mit einem Index von bis zu 3000 und mehr Spalten viel größer.
Am Ende möchte ich ein Violinplot von zwei der Spalten in den Datenrahmen erstellen, jedoch für mehrere Wörterbucheinträge. Das Wörterbuch hat ein Tupel als Schlüssel und ich möchte alle Einträge sammeln, deren erste Zahl gleich ist.

Code: Select all

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data_dict = {
(5, 1): pd.DataFrame({"Data_1": [0.235954, 0.739301, 0.443639],
"Data_2": [0.069884, 0.236283, 0.458250],
"Data_3": [0.170902, 0.496346, 0.399278],
"Data_4": [0.888658, 0.591893, 0.381895]}),
(5, 2): pd.DataFrame({"Data_1": [0.806812, 0.224321, 0.504660],
"Data_2": [0.070355, 0.943047, 0.579285],
"Data_3": [0.526866, 0.251339, 0.600688],
"Data_4": [0.283107, 0.409486, 0.307315]}),
(7, 3): pd.DataFrame({"Data_1": [0.415159, 0.834547, 0.170972],
"Data_2": [0.125926, 0.401789, 0.759203],
"Data_3": [0.398494, 0.587857, 0.130558],
"Data_4": [0.202393, 0.395692, 0.035602]}),
(7, 4): pd.DataFrame({"Data_1": [0.923432, 0.622174, 0.185039],
"Data_2": [0.759154, 0.126699, 0.783596],
"Data_3": [0.075643, 0.287721, 0.939428],
"Data_4": [0.983739, 0.738550, 0.108639]})
}
Meine Idee war, dass ich es in einem anderen Wörterbuch neu anordnen und dann den Geigenplot zeichnen könnte. Angenommen, „Data_1“ und „Data_4“ sind von Interesse. Dann durchlaufe ich die Schlüssel in dict wie folgt.

Code: Select all

new_dict = {}
for col in ['Data_1','Data_4']:
df = pd.DataFrame()
for i in [5,7]:
temp = []
for key, value in dict.items():
if key[0]==i:
temp.extend(value[col])
df[i] = temp
new_dict[col] = df
Das macht dann das folgende Diktat.

Code: Select all

new_dict =
{'Data_1':           5         7
0  0.235954  0.415159
1  0.739301  0.834547
2  0.443639  0.170972
3  0.806812  0.923432
4  0.224321  0.622174
5  0.504660  0.185039,
'Data_4':           5         7
0  0.888658  0.202393
1  0.591893  0.395692
2  0.381895  0.035602
3  0.283107  0.983739
4  0.409486  0.738550
5  0.307315  0.108639}
Die ich dann durchlaufe, um die Geigendiagramme für Data_1und Data_4 zu erstellen.

Code: Select all

for key, value in new_dict.items():
fig, ax = plt.subplots()
ax.violinplot(value, showmeans= True)
ax.set(title = key, xlabel = 'Section', ylabel = 'Value')
ax.set_xticks(np.arange(1,3), labels=['5','7'])
Obwohl ich das gewünschte Ergebnis erhalte, ist es sehr umständlich, das Wörterbuch neu anzuordnen. Könnte dies schneller erfolgen? Da es sich um dieselbe Spalte handelt, die ich für jeden Wörterbucheintrag haben möchte, bin ich der Meinung, dass dies der Fall sein sollte.