Объединение результатов т-критерия в таблицу
Рассчитываю т-критерий методом scipy.stats.ttest_ind. Для каждого показателя (у меня их 7 по столбцам) у меня рассчитываются отличия для подвыборок мужчин и женщин.
Я хочу это объединить в таблицу, чтоб оно выплевывалось не в куче или не отдельного для конкретно указанного показателя.
ttest = scipy.stats.ttest_ind(men, women)
itog = pd.DataFrame({"statistic":[ttest[0]],
"pvalue": [ttest[1]],
"значимость": ['True' if ttest[1] >= 0.05 else 'False']})
Но сталкиваюсь с ошибкой ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(). Вероятно, мои результаты (на самом деле выплевываемые прямым подсчетом для датафрейма в виде
Ttest_indResult(statistic=array([ 0.05133366, 2.08921468, 0.53197364, -1.52560193, 3.60045126,
1.62095854, 3.90005821]), pvalue=array([9.59113294e-01, 3.80132297e-02, 5.95362479e-01, 1.28763189e-01,
4.04850724e-04, 1.06676229e-01, 1.33116661e-04]))
нужно "расшить", прежде чем компоновать в таблицу. Как мне обойти эту ошибку? Предпочитаемый итог, к которому стремлюсь, 
Ответы (1 шт):
Попробуйте так:
ttest = scipy.stats.ttest_ind(men, women)
itog = pd.DataFrame({"statistic": ttest[0],
"pvalue": ttest[1],
"значимость": ttest[1] >= 0.05})
Пояснение. Код ttest[1] >= 0.05 порождает Pandas.Series с булевским вектором значений, и когда вы пытаетесь его методами питона проверить через if Pandas.Series на истинность - возникает ошибка - питон не понимает, что ему делать с массивом булевых значений, истинно оно или ложно - непонятно. А вот Pandas прекрасно знает, как обработать Pandas.Series, чтобы сделать из него колонку в DataFrame - он возьмёт из него значения, а индекс отбросит.
Или можно сделать так, если вам так более понятно, и если вам нужны именно строковые True и False, а не булевские. Т.е. применить тернарный if нужно к каждому элементу массива:
"значимость": ['True' if t >= 0.05 else 'False' for t in ttest[1]]
P.S. Обратите внимание, что я ещё убрал квадратные скобки, в которые вы взяли значения первых двух колонок. У вас так получится, что все значения массива попадут в одну ячейку DataFrame-а.