在我的工作流程中,我主要使用的工具之一是do.call(rbind, lapply())
,在R语言中可以像这样进行示例:
df1 <- data.frame(x1 = rnorm(10), x2 = rnorm(10), x3 = rnorm(10))
df2 <- data.frame(x1 = rnorm(10, 5), x2 = rnorm(10), x3 = rnorm(10))
getp <- function(var) {
return(t.test(df1[, var], df2[, var])$p.value)
}
list <- c('x1', 'x2', 'x3')
ps <- do.call(rbind, lapply(list, getp))
ps
[,1]
[1,] 6.232025e-09
[2,] 2.128019e-09
[3,] 5.824713e-08
这将创建一个漂亮的p值列。在实际应用中,我将提取一个仅有一行的数据框,每个列都包含有用的模型统计信息。目标是迭代运行许多相同类型的模型列,并查看其适合度/效果。
在Python中,我可以创建一个类似的功能:
from statsmodels.stats.weightstats import ttest_ind
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'x1' : np.random.randn(10), 'x2' : np.random.randn(10), 'x3' : np.random.randn(10)})
df2 = pd.DataFrame({'x1' : np.random.randn(10)+5, 'x2' : np.random.randn(10)+5, 'x3' : np.random.randn(10)+5})
def getp(var):
print(ttest_ind(df1[var], df2[var])[1])
vars = ['x1', 'x2', 'x3']
我可以通过以下方式将所有p值打印到控制台上:
```python print(pvalues) ```
for i in vars:
getp(i)
9.67944232638e-08
1.82163637251e-08
2.00410346438e-10
但我想将其保存为一个对象,类似于R中的一个列和三行。这可能吗?
谢谢!
实际函数可能是这样的:
def getMoreThanP(var):
out = pd.DataFrame({'mean1' : [np.mean(df1[var])], 'mean2' : [np.mean(df2[var])], 'pvalue' : [ttest_ind(df1[var], df2[var])[1]]})
print(out)
for i in vars:
getMoreThanP(i)
... getMoreThanP(i)
mean1 mean2 pvalue
0 0.24452 4.824327 2.438985e-11
mean1 mean2 pvalue
0 0.187176 4.969862 1.115546e-11
mean1 mean2 pvalue
0 0.035759 5.249378 1.525264e-08