在Python中使用Scipy进行方差分析,无需手动键入每个组名

在Python中使用Scipy进行方差分析,无需手动键入每个组名,python,scipy,anova,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 ... 下面的代码不工作,并给出

我有一个像这样的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()
for prot in proteins:
    df[df['Ens_prot_ID'] == prot]['ppm/TPM']

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

您可以这样做:

stats.f_oneway(*(df[df['Ens_prot_ID'] == prot]['ppm/TPM'] for prot in proteins))
*
允许您向函数传递多个参数:

我还将列表理解更改为a,以防您的
DataFrame
非常大

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