Pandas 数据帧中所有列的2行之间的Dask T测试

Pandas 数据帧中所有列的2行之间的Dask T测试,pandas,dataframe,dask,t-test,Pandas,Dataframe,Dask,T Test,我编写了以下函数来计算所有列中两个类别之间的统计测试- 我能够使用dask提取类别,但我需要计算并使用pandas获得ttest(或其他统计测试) 我想知道是否有人知道如何使用dask不仅运行分类,而且并行运行每列的t测试) 下面是我的代码: import numpy as np import pandas as pd import dask from scipy.stats import ttest_ind from scipy.stats import ttest_rel from sc

我编写了以下函数来计算所有列中两个类别之间的统计测试-

我能够使用dask提取类别,但我需要计算并使用pandas获得ttest(或其他统计测试) 我想知道是否有人知道如何使用dask不仅运行分类,而且并行运行每列的t测试) 下面是我的代码:

import numpy as np
import pandas as pd
import dask
from scipy.stats import ttest_ind 
from scipy.stats import ttest_rel 
from scipy.stats import kstest 

df = pd.DataFrame({
'var1'      : np.random.randint(0, 1000000, 1000000),
'var2'      : np.random.randint(0, 1000000, 1000000),
'var3'      : np.random.randint(0, 1000000, 1000000),
'Category'   : np.random.randint(0, 2, 1000000) 
})


custom_list = dask.dataframe.Aggregation('custom_test', 
                                         chunk= lambda s: s.apply(lambda x:list(x)),
                                         agg = lambda s0 :s0.obj.groupby(level=list(range(s0.obj.index.nlevels))).sum(),
                                         finalize= lambda s1 :s1.apply(lambda x: x))

def testCustom(x, test=kstest, **args):
    x=list(x)
    return test(x[0],x[1])

def diffDiffrentialCategory(df, catcol='Category', test=ttest_ind, pVal=0.05, chunksize=10000, **args):
    ddf=dask.dataframe.from_pandas(df,chunksize=chunksize)

    df1=ddf.groupby(catcol).aggregate(custom_list).compute()
    # I'd like to work directly on df1=ddf.groupby(catcol).aggregate(custom_list) w/o compute()
    df1=pd.DataFrame.from_records(df1.apply(testCustom, test=test)).set_index(df1.columns).rename(columns={0:'statistic', 1:'p-value'})
    return df1[df1['p-value']<=pVal]
将numpy导入为np
作为pd进口熊猫
进口达斯克
从scipy.stats导入ttest\u ind
从scipy.stats导入ttest\u rel
从scipy.stats导入kstest
df=pd.DataFrame({
'var1':np.random.randint(0,1000000,1000000),
'var2':np.random.randint(0,1000000,1000000),
'var3':np.random.randint(0,1000000,1000000),
“类别”:np.random.randint(0,210000)
})
custom_list=dask.dataframe.Aggregation('custom_test',
chunk=lambda s:s.apply(lambda x:list(x)),
agg=lambda s0:s0.obj.groupby(level=list(range(s0.obj.index.nlevels))).sum(),
最终确定=λs1:s1。应用(λx:x))
def testCustom(x,test=kstest,**参数):
x=列表(x)
返回测试(x[0],x[1])
def差异分类(df,catcol='Category',test=ttest\u ind,pVal=0.05,chunksize=10000,**参数):
ddf=dask.dataframe.from_(df,chunksize=chunksize)
df1=ddf.groupby(catcol).aggregate(自定义列表).compute()
#我想直接在df1=ddf.groupby(catcol.aggregate)上工作,而不使用compute()
df1=pd.DataFrame.from_记录(df1.apply(testCustom,test=test)).set_索引(df1.columns).重命名(columns={0:'statistic',1:'p-value'})

返回df1[df1['p-value']我假设您正在尝试检测这两个类别之间的平均值是否存在统计上的显著差异?这些样本是相关的还是独立的?@NickODell,没错,1)我想看看这两个类别在哪些列上存在显著差异。这段代码实际上起到了作用。2)因为我想在diff中使用在不同的情况下,您可以看到testCustom函数可以将任何测试作为输入。3)问题是,在我使用dask将两个类别分离为列表以构建df1之后,我需要计算df1,然后将testCustom应用于pandas数据帧。我想做的是在计算之前应用testCustom或类似于df1的东西,以便并行运行用dask的el代替熊猫,这有意义吗?