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?