В вашем примере я думаю, что subj не очень хороший показатель. Я бы рекомендовал использовать числовой инкрементный индекс или мультииндекс. С этим легче справиться в будущем. Рассмотрим пример:
df = pd.DataFrame(
data={
'subj':["subj1","subj1", "subj1", "subj1", "subj2", "subj2","subj2", "subj2", "subj3", "subj3"] ,
"obs":["test1","test2","test2","test1",'test1','test1','test2','test2','test1','test2'],
"result":[101,103,105,110, 203,159,193,285,400,543]
}
)
df
subj obs result
0 subj1 test1 101
1 subj1 test2 103
2 subj1 test2 105
3 subj1 test1 110
4 subj2 test1 203
5 subj2 test1 159
6 subj2 test2 193
7 subj2 test2 285
8 subj3 test1 400
9 subj3 test2 543
Давайте рассмотрим, что вы хотите вычислить средний результат для каждого уникального subj. Поскольку все точки данных имеют собственную строку, вы можете использовать функции panda: groupby и означает .
df.groupby('subj').mean()
result
subj
subj1 104.75
subj2 210.00
subj3 471.50
или если вы хотите вычислить среднее значение для каждого subj и obj
df.groupby(['subj','obs']).mean()
result
subj obs
subj1 test1 105.5
test2 104.0
subj2 test1 181.0
test2 239.0
subj3 test1 400.0
test2 543.0
Если вы встретите точки данных в списках после импорта данных из Excel, я рекомендую написать функцию, которая сделает n строк из 1 и применить к 1 оси
Надеюсь, это поможет!