Заменить значения в датафрейме в булевой логике
Рассчитываю один статистический показатель (проверка нормальности по Шапиро-Уилку). Результаты представляютяс в такой форме:
Я же хочу, чтобы в столбце pvalue были не значенияю, а знчаения в булевой логике: если меньше или равно - то True, если больше - false
import pandas as pd
import scipy.stats as stats
def shap(col, hz):
shapiro_test = stats.shapiro((col))
df1 = pd.DataFrame({"statistic":[shapiro_test[0]],
"pvalue": [
if shapiro_test[1] <= 0.95:
print('True');
else:
print('False') ]})
return df1.assign(column=col.name,
otrasl = hz)
res = pd.concat([shap(df[col]) for col in df)
res.to_excel("mmm.xlsx")
df- это мои данные
Прилагаю данные https://docs.google.com/spreadsheets/d/1yZM9bdSjs_8J9CxvUET8L4TjLRdyivtf6MfWy8zgZKE/edit?usp=sharing
Ответы (2 шт):
Автор решения: imitusov
→ Ссылка
import pandas as pd
import scipy.stats as stats
test = pd.read_csv('') # загружаем файл
colums_for_test = ['критерий_1', 'критерий_2', 'критерий_3'] # выбираем колонки для теста
res = test.loc[:, colums_for_test].apply(stats.shapiro) # получаем tuple с результатами
res = res.apply(pd.Series) #конертируем в DF
res.columns = ['statistic', 'pvalue']
res['pvalue'] = res['pvalue'] <= .95
В вашем случае вы можете просто дописать
res = pd.concat([shap(df[col]) for col in df)
res['pvalue'] = res['pvalue'] <= .95 #pvalue станет тип boolean
res.to_excel("mmm.xlsx")
Автор решения: Andrew
→ Ссылка
Так все очень просто, вот такая функция:
def shap(col, hz):
shapiro_test = stats.shapiro((col))
df1 = pd.DataFrame({"statistic":[shapiro_test[0]],
"pvalue": col[1] <= 0.95})
return df1.assign(column=col.name,
otrasl=hz)
Получается такой датафрейм:
statistic pvalue
0 some_value True
1 some_value False
