Umformen Sie das Wörterbuch, um eine Geigenhandlung zu erstellen
Posted: 14 Jan 2025, 14:06
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.
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.
Das macht dann das folgende Diktat.
Die ich dann durchlaufe, um die Geigendiagramme für Data_1und Data_4 zu erstellen.
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.
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]})
}
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
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}
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'])