按组将函数应用于Pandas数据框中的每一行

问题描述

我建立了一个Pandas数据框(下面的示例),该数据框由基因名称索引,该数据框具有列和整数的样本名称作为单元格值。我要执行的操作是对行值列表运行ANOVA(f_oneway(),从scipy.stats开始),该行值列表由与样本组相对应的列的列表定义。然后将这些结果存储在一个新的Pandas数据框中,该数据框中的组名称为列,索引的基因相同。

数据框的示例(它是从my中的另一个函数返回的):

import pandas as pd
counts = {'sample1' : [0,1,5,10],'sample2' : [2,10,0],'sample3' : [0,'sample4' : [10,4,0]}
data = pd.DataFrame(counts,columns = ['sample1','sample2','sample3','sample4'],index = ['gene1','gene2','gene3','gene4','gene5'])

通过main()将组作为参数导入,因此在此函数中,我具有:

def compare(out_prefix,pops,data):
    import scipy.stats as stats
    sig = pd.DataFrame(index=data.index)

#groups will look like:
#groups = [['sample1','sample2'],['sample3','sample4']]

    for group in groups:
        with open(group) as infile:
            groups_s = []
            for spl in infile:
                group_s.append(spl.replace("\n",""))

        mean_col = pop.split(".")[0]+"_mean"
        std_col = pop.split(".")[0]+"_std"
        stat_col = pop.split(".")[0]+"_stat"
        p_col = pop.split(".")[0]+"_sig"

        sig[mean_col] = data[group_s].mean(axis=1)
        sig[std_col] = data[group_s].std(axis=1)

        sig[[stat_col,p_col]] = data.apply(lambda row : stats.f_oneway(data.loc[group_s].values.tolist()))

这最后一行无效,而且我看不出过去几天中的某些谷歌搜索如何完成-有人可以向我指出正确的方向吗? 理想情况下,它将每组的样本的每行ANOVA测试的结果(功效,显着性)写入stat_col中的列p_colsig中。对于gene1,它将向stats.f_oneway提供每个组例如 [[0,2],[0,10]]中样本值列表的列表。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)