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

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Umformen Sie das Wörterbuch, um eine Geigenhandlung zu erstellen

by Guest » 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.

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.

Top