Python 中的方差分析使用 Scipy,无需手动输入每个组名

Anova in Python using Scipy without manually typing in every group name

我有一个看起来像这样的 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() 不喜欢我的输入形式。有什么方法可以让函数接受不是手动输入的组名吗?

你可以这样做:

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 非常大。