Рассчитать показатели и склеить в одну таблицу
Добры вечер! Пытаюсь рассчитать показатели Шапиро-Уилка и склеить в один файл по всем показателям. Если рассчитываю для всего фрейма данных, то все отлично склеивается
def shap(col):
shapiro_test = stats.shapiro(stats.norm.rvs(col))
df = pd.DataFrame({"statistic":[shapiro_test[0]],
"pvalue":[shapiro_test[1]]})
return df.assign(column=col.name)
res = pd.concat([shap(df[col]) for col in df.columns], ignore_index=True)
print(res)
Получаю:
statistic pvalue column
0 0,979186 0,000914 критерий_1
1 0,950722 1,5E-07 критерий_2
2 0,974145 0,000146 критерий_3
Однако, если я хочу рассчитывать не по всему датафрейму, а отдельно с условием по тем индексам, которые я хочу, у меня не получается склеить это в одну табличку.
from scipy import stats
import numpy as np
import numpy as np
import os
import pandas as pd
data = pd.read_excel('Модификация.xlsx', sheet_name='Результаты', index_col=[0])
#хочу брать результаты только с этим индексом, рассчитывать для них Шапиро-Уилка отдельно для каждого критерия (столбца) и сшивать в одну таблицу
raspred_sfera = data.loc[['mos', 'gest', 'guro', 'dan']]
raspred_obsh = data.loc[['desantel', 'guro1', 'rb', 'diro']]
raspred_potr = data.loc[['lido']]
def shap(col):
shapiro_test = stats.shapiro(stats.norm.rvs(col))
df = pd.DataFrame({"statistic":[shapiro_test[0]],
"pvalue":[shapiro_test[1]]})
# здесь хочу, чтобы не только названия столбца были, но и названия тех дат (raspred_sfera,raspred_obsh, raspred_potr), на основе которой столбец считался
return df.assign(column=col.name)
# и хочу все это склеить в одну табличку
res = pd.concat([shap(raspred_sfera[col]) for col in raspred_sfera.columns],
[shap(raspred_obsh[col]) for col in raspred_obsh.columns],
[shap(raspred_potr[col]) for col in raspred_potr.columns],
ignore_index=True)
res.to_excel("shap.xlsx")
Мои данные выглядят так. Помогите, что я делаю не так?
https://docs.google.com/spreadsheets/d/1yZM9bdSjs_8J9CxvUET8L4TjLRdyivtf6MfWy8zgZKE/edit?usp=sharing