Один из моих главных инструментов в моих рабочих процессов является do.call(rbind, lapply())
, как exampled здесь в R:Python эквивалент 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
Это создает хорошую колонку р- значения. В реальном мире я бы вытащил один ряд data.frame с каждым столбцом, имеющим полезную статистику модели. Цель состоит в том, чтобы перебирать множество столбцов с одним и тем же типом модели и видеть соответствие/эффекты.
В 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']
Я могу печатать все 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
Мой разум взорван, что ttest_ind принимает массив. Очень круто. Но я не уверен, что он решает мою полную проблему, поскольку то, что я действительно буду делать, - это желание собрать кучу вещей с каждой переданной переменной. Мой пост теперь обновлен, чтобы немного приблизиться к той функции, которую я могу написать. –
Вы хотите напечатать значения или вернуть массив (матрица 3x3 в конце)? – ayhan
Я хочу вернуть 3x3 'matrix' /' DataFrame'. С помощью метода loop я знаю, как видеть результат с помощью 'print()', поэтому я использую его здесь. Я предполагаю, что использую правильный метод. –