尝试计算范围(置信区间)以返回映射到列上的lambda中的两个值。
M=12.4; n=10; T=1.3
dt = pd.DataFrame( { 'vc' : np.random.randn(10) } )
ci = lambda c : M + np.asarray( -c*T/np.sqrt(n) , c*T/np.sqrt(n) )
dt['ci'] = dt['vc'].map( ci )
print '\n confidence interval ', dt['ci'][:,1]
..呃,那怎么办呢?
那么,如何解释lambda中的元组? (我想检查范围是否> 0,即包含均值) 以下两项工作都没有:appnd = lambda c2: c2[0]*c2[1] > 0 and 1 or 0
app2 = lambda x,y: x*y >0 and 1 or 0
dt[cnt] = dt['ci'].map(app2)
答案 0 :(得分:3)
通过为CI定义适当的功能而不是lambda
,可能更容易看到。
就解包而言,也许你可以让函数接受是否加减的参数,然后再应用两次。
您还应该计算函数的均值和大小,而不是提前分配它们。
In [40]: def ci(arr, op, t=2.0):
M = arr.mean()
n = len(arr)
rhs = arr * t / np.sqrt(n)
return np.array(op(M, rhs))
您可以从add
sub
和operator
个功能
从那里它只是一个班轮:
In [47]: pd.concat([dt.apply(ci, axis=1, op=x) for x in [sub, add]], axis=1)
Out[47]:
vc vc
0 -0.374189 1.122568
1 0.217528 -0.652584
2 -0.636278 1.908835
3 -1.132730 3.398191
4 0.945839 -2.837518
5 -0.053275 0.159826
6 -0.031626 0.094879
7 0.931007 -2.793022
8 -1.016031 3.048093
9 0.051007 -0.153022
[10 rows x 2 columns]
为了清晰起见,我建议将其分为几个步骤。
获取r1 = dt.apply(ci, axis=1, op=sub)
的减号和r2 = dt.apply(ci, axis=1, op=add)
的加号。与pd.concat([r1, r2], axis=1)
基本上,很难从dt.apply
告诉输出应该是什么样子,只看到一些元组。通过单独应用,我们得到两个10 x 1阵列。