Возвращение нескольких значений из панд применяется к DataFrame
Я пользуюсь пандамиDataFrame
чтобы выполнить рядовой t-тест в соответствии с этим примером:
import numpy
import pandas
df = pandas.DataFrame(numpy.log2(numpy.randn(1000, 4),
columns=["a", "b", "c", "d"])
df = df.dropna()
Теперь, предположив, что у меня есть "a" и "b" в одной группе, а "c" и "d" в другой, я выполняю t-тест по строкам. Это довольно тривиально с пандами, используяapply
с осью = 1. Однако я могу либо вернуть DataFrame той же формы, если моя функция не агрегирует, или Series, если она агрегирует.
Обычно, я бы просто вывел p-значение (то есть агрегацию), но я бы хотел сгенерировать дополнительное значение на основе других вычислений (другими словами, вернуть два значения). Конечно, я могу сделать два прогона, сначала агрегировать p-значения, а затем выполнить другую работу, но мне было интересно, есть ли более эффективный способ сделать это, поскольку данные достаточно большие.
В качестве примера расчета гипотетической функцией будет:
from scipy.stats import ttest_ind
def t_test_and_mean(series, first, second):
first_group = series[first]
second_group = series[second]
_, pvalue = ttest_ind(first_group, second_group)
mean_ratio = second_group.mean() / first_group.mean()
return (pvalue, mean_ratio)
Затем вызывается с
df.apply(t_test_and_mean, first=["a", "b"], second=["c", "d"], axis=1)
Конечно, в этом случае он возвращает одну серию с двумя кортежами в качестве значения.
Instead, ny ожидаемый результат будет DataFrame с двумя столбцами, один для первого результата и один для второго. Возможно ли это, или мне нужно сделать два прогона для двух вычислений, а затем объединить их вмест