使用Scipy的Python中的Anova无需手动输入每个组名

时间:2017-03-31 20:26:57

标签: python scipy anova

我有一个看起来像这样的df

           Ens_prot_ID      Ens_gene_ID Sample     TPM      ppm   ppm/TPM
0      ENSP00000416240  ENSG00000109072  liver  2540.4    0.003  0.000001
21597  ENSP00000226218  ENSG00000109072  liver  2540.4  110.000  0.043300
...

以下代码无效,并提供“KeyError:0”

from scipy import stats
proteins=df['Ens_prot_ID'].unique()
stats.f_oneway([df[df['Ens_prot_ID'] == prot]['ppm/TPM'] for prot in proteins])

我没有遇到任何问题

from scipy import stats
proteins=df['Ens_prot_ID'].unique()
for prot in proteins:
    df[df['Ens_prot_ID'] == prot]['ppm/TPM']

所以似乎问题是f_oneway()不喜欢我的输入形式。有没有办法让函数接受未手动输入的组名?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

stats.f_oneway(*(df[df['Ens_prot_ID'] == prot]['ppm/TPM'] for prot in proteins))

*允许您将多个参数传递给函数:https://pythontips.com/2013/08/04/args-and-kwargs-in-python-explained/

我还将列表理解更改为generator comprehension,以防DataFrame非常大。