У меня есть ряд вложенных панд DataFrames, содержащих несколько (сотни) массивов, и я хотел бы усреднить каждую переменную по разным уровням вложенности.
Переменная mydatadf
содержит очень простой репрезентативный пример моих реальных данных.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
mydata = dict()
participant = ['participantA', 'participantB']
for p in participant:
ses = dict()
session = ['ses_1', 'ses_2']
for s in session:
series = dict()
set = ['s_1', 's_2', 's_3']
for se in set:
reps = dict()
rep = ['r_1', 'r_2', 'r_3', 'r_4', 'r_5']
for r in rep:
vars = dict()
vars = {'var1': np.sin(np.random.rand(1000)*2),
'var2': np.sin(np.random.rand(1000)*2)}
varsdf = pd.DataFrame(data=vars)
reps[r] = vars
series[se] = reps
ses[s] = series
mydata[p] = ses
mydatadf = pd.DataFrame(mydata)
Как можно эффективно усреднить (например) var1
по уровням вложенности reps
, series
, ses
и / или participant
?
В конце концов, я хотел бы нанести все объекты var1
и выделить осредненные данные различными цветами на любом желаемом уровне вложенности.
for p in mydatadf.keys():
for ses in mydatadf[p].keys():
for set in mydatadf[p][ses].keys():
for rep in mydatadf[p][ses][set].keys():
data = mydatadf[p][ses][set][rep]['var1']
plt.plot(data)
plt.show()