Насколько я мог понять, я просто размещаю здесь свое наблюдение, чтобы вы могли посмотреть, насколько оно соответствует тому, что вы ищете, однако от экспертов все еще ожидается идеальный ответ:
Моделирование dataFrame из вашего примера:
>>> df
SubjNum Class Genderm1f2 LRLevel exp1 exp2 exp3 exp4 exp5
0 8001 8 1 1 88 2 15 19 92
1 8002 8 2 1 85 59 19 20 97
2 8003 8 2 1 84 52 12 18 91
3 8004 11 2 1 85 44 17 20 92
4 8005 11 2 1 81 35 400 18 93
5 8006 11 1 1 190 56 20 17 97
Среднее значение на основе этих двух столбцов:
>>> df.groupby(['Class', 'Genderm1f2']).mean()
SubjNum LRLevel exp1 exp2 exp3 exp4 exp5
Class Genderm1f2
8 1 8001.0 1.0 88.0 2.0 15.0 19.0 92.0
2 8002.5 1.0 84.5 55.5 15.5 19.0 94.0
11 1 8006.0 1.0 190.0 56.0 20.0 17.0 97.0
2 8004.5 1.0 83.0 39.5 208.5 19.0 92.5
стандартное отклонение по этим двум столбцам:
>>> df.groupby(['Class', 'Genderm1f2']).std()
SubjNum LRLevel exp1 exp2 exp3 exp4 exp5
Class Genderm1f2
8 1 NaN NaN NaN NaN NaN NaN NaN
2 0.707107 0.0 0.707107 4.949747 4.949747 1.414214 4.242641
11 1 NaN NaN NaN NaN NaN NaN NaN
2 0.707107 0.0 2.828427 6.363961 270.821897 1.414214 0.707107
Просто группа по двум нужным столбцам с совокупностью mean()
& std()
.
>>> df.groupby(['Class', 'Genderm1f2']).agg(['mean','std'])
SubjNum LRLevel exp1 exp2 exp3 exp4 exp5
mean std mean std mean std mean std mean std mean std mean std
Class Genderm1f2
8 1 8001.0 NaN 1 NaN 88.0 NaN 2.0 NaN 15.0 NaN 19 NaN 92.0 NaN
2 8002.5 0.707107 1 0.0 84.5 0.707107 55.5 4.949747 15.5 4.949747 19 1.414214 94.0 4.242641
11 1 8006.0 NaN 1 NaN 190.0 NaN 56.0 NaN 20.0 NaN 17 NaN 97.0 NaN
2 8004.5 0.707107 1 0.0 83.0 2.828427 39.5 6.363961 208.5 270.821897 19 1.414214 92.5 0.707107
Просто группа по двум желаемым столбцам с совокупностью mean()
& std()
, чьи значения больше 3.
>>> df.groupby(['Class', 'Genderm1f2']).agg(['mean','std']) > 3
SubjNum LRLevel exp1 exp2 exp3 exp4 exp5
mean std mean std mean std mean std mean std mean std mean std
Class Genderm1f2
8 1 True False False False True False False False True False True False True False
2 True False False False True False True True True True True False True True
11 1 True False False False True False True False True False True False True False
2 True False False False True False True True True True True False True False