![](/img/trans.png)
[英]How to prevent Pandas Dataframe from repeating column names at every row?
[英]Calling a function on every column of a pandas DataFrame
我想比较两个样本之间的平均差异,通过以下pandas DataFrame
的变量sample
进行DataFrame
:
import numpy as np
import pandas as pd
df = pd.DataFrame({'sample': np.random.choice([1, 2], 10, replace=True),
'x': np.random.uniform(size=100),
'y': np.random.normal(size=100),
'z': np.random.choice([1,5,7,3,9],100, replace=True})
汇入后
from scipy import stats
我想用这个功能
stats.ttest_ind(s1, s2, equal_var = False)
在df
每个列z
上,使得s1=df['sample'==1, z]
对应于来自样本1的列的子集,并且s2=df['sample'==2, z]
对应于子集样本2中的z
。
对于一个变量,我可以使用:
stats.ttest_ind(df.ix[df['sample']==1, 'x'], df.ix[df['sample']==2, 'x'], equal_var= False)
我正在寻找一种方法来同时为所有列执行此操作。 我怎样才能做到这一点?
在df.columns上使用For循环
import numpy as np
import pandas as pd
from scipy import stats
df = pd.DataFrame({'sample': np.random.choice([1, 2], 100, replace=True),
'x': np.random.uniform(size=100),
'y': np.random.normal(size=100),
'z': np.random.choice([1,5,7,3,9],100, replace=True)})
def ttest(x):
y = stats.ttest_ind(df.ix[df['sample']==1, x],
df.ix[df['sample']==2, x],
equal_var= False)
return y
for col in df.columns:
print col, ttest(col)
输出:
sample (-inf, 0.0)
x (0.051257527331014435, 0.95922494541232151)
y (-1.8814017903969658, 0.063320355499510511)
z (-1.0033063682017582, 0.31819256215047681)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.