熊猫lambda元组映射

时间:2014-05-13 20:37:33

标签: python pandas

尝试计算范围(置信区间)以返回映射到列上的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)

1 个答案:

答案 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

导入suboperator个功能

从那里它只是一个班轮:

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阵列。