Zwracanie wielu wartości z pand ma zastosowanie w ramce DataFrame

Używam pandDataFrame wykonać t-test w wierszu według tego przykładu:

import numpy
import pandas

df = pandas.DataFrame(numpy.log2(numpy.randn(1000, 4), 
                      columns=["a", "b", "c", "d"])

df = df.dropna()

Załóżmy teraz, że mam „a” i „b” jako jedną grupę, a „c” i „d” na drugiej, wykonuję test t-rowse. Jest to dość trywialne w przypadku pand, używającapply z osią = 1. Jednak mogę zwrócić ramkę DataFrame o tym samym kształcie, jeśli moja funkcja nie agreguje, lub serię, jeśli agreguje.

Normalnie po prostu wyprowadzałbym wartość p (a więc agregację), ale chciałbym wygenerować dodatkową wartość na podstawie innych obliczeń (innymi słowy, zwrócić dwie wartości). Mogę oczywiście wykonać dwie serie, najpierw agregując wartości p, a potem wykonać drugą pracę, ale zastanawiałem się, czy jest na to skuteczniejszy sposób, ponieważ dane są dość duże.

Przykładem obliczeń jest funkcja hipotetyczna:

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)

Następnie wywołany z

df.apply(t_test_and_mean, first=["a", "b"], second=["c", "d"], axis=1)

Oczywiście w tym przypadku zwraca pojedynczą serię z dwiema krotkami jako wartością.

Zamiast tego, oczekiwane dane wyjściowe byłyby DataFrame z dwiema kolumnami, jedna dla pierwszego wyniku i jedna dla drugiego. Czy to możliwe, czy muszę wykonać dwa biegi dla dwóch obliczeń, a następnie połączyć je razem?

questionAnswers(1)

yourAnswerToTheQuestion