У меня есть некоторые данные, которые сохранены в словаре фреймов данных. Реальные данные намного больше с индексом до 3000 и более столбцов.
В конце концов я хочу сделать скрипичный график из двух столбцов в кадрах данных, но для нескольких записей словаря. В словаре в качестве ключа используется кортеж, и я хочу собрать все записи с одинаковым первым номером.
Моя идея заключалась в том, что я мог бы перестроить его в другой словарь, а затем построить скрипичный сюжет. Скажем, что «Data_1» и «Data_4» представляют интерес. Затем я перебираю ключи в dict, как показано ниже.
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
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'])
Хотя я получаю желаемый результат, переупорядочивать словарь очень затруднительно. Можно ли это сделать более быстрым способом? Поскольку мне нужен один и тот же столбец для каждой словарной статьи, я считаю, что так и должно быть.
У меня есть некоторые данные, которые сохранены в словаре фреймов данных. Реальные данные намного больше с индексом до 3000 и более столбцов. В конце концов я хочу сделать скрипичный график из двух столбцов в кадрах данных, но для нескольких записей словаря. В словаре в качестве ключа используется кортеж, и я хочу собрать все записи с одинаковым первым номером. [code] 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] Моя идея заключалась в том, что я мог бы перестроить его в другой словарь, а затем построить скрипичный сюжет. Скажем, что «Data_1» и «Data_4» представляют интерес. Затем я перебираю ключи в dict, как показано ниже. [code]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] Затем сделайте следующий запрос. [code]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] Что я затем повторяю, чтобы построить графики скрипки для Data_1 и Data_4. [code]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']) [/code] Хотя я получаю желаемый результат, переупорядочивать словарь очень затруднительно. Можно ли это сделать более быстрым способом? Поскольку мне нужен один и тот же столбец для каждой словарной статьи, я считаю, что так и должно быть.