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
非常大。
我有一个看起来像这样的 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
非常大。