我使用的是熊貓DataFrame
做逐行t檢驗,按照本例:返回從熊貓多個值適用於數據幀
import numpy
import pandas
df = pandas.DataFrame(numpy.log2(numpy.randn(1000, 4),
columns=["a", "b", "c", "d"])
df = df.dropna()
現在,假設我有「一」和「 b「作爲一個組,」c「和」d「在另一個組中,我正在按行進行t檢驗。這對大熊貓來說相當微不足道,使用apply
和axis = 1。但是,如果我的函數沒有聚合,我可以返回相同形狀的DataFrame;如果聚合,我可以返回一個Series。
正常情況下,我只是輸出p值(所以,聚合),但我想生成基於其他計算(換句話說,返回兩個值)的附加值。我當然可以做兩次運行,首先彙總p值,然後再做其他工作,但我想知道是否有更高效的方式來處理數據,因爲數據相當大。
作爲計算的一個例子,一個hypotethical功能將是:
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)
當然在這種情況下它返回與兩個元組作爲值的單個系列調用。
相反,ny預期的輸出將是一個DataFrame,它有兩列,一列用於第一個結果,另一列用於第二列。這是可能的,或者我必須爲兩次計算做兩次運行,然後將它們合併在一起?
爲什麼您首先使用'apply'?你的結果是一個新的'DataFrame',它具有與輸入(行和列)不同的形狀,因此它是一個全新的obj。您可以讓't_test_and_mean'接受您的輸入數據框(以及要分組的列)並返回1行2列數據框,而不使用「apply」。 – lbolla
@lbolla對,最終我在代碼中完成了這個工作。 – Einar