2013-09-23 263 views
0

我有使用larry包的可能不同尺寸的2D标签矩阵,我需要将它们与标签对齐。 larry包裹照顾这个,但期望相同的维度增加两个矩阵。添加具有不同尺寸和标签的矩阵

但是对于我的任务,每个维度都有不同的顺序标签。拉里处理它,同时增加

e.g:

la.add(lar1, lar2, join='inner')

,但预计都LAR1和LAR2是相同的尺寸,但我的矩阵甚至有可能除了不同的排序标签的不同的尺寸。我想要什么

例如:

ADD([[1,2][3,4]],[[5,6,7][5,7,2]],label=[[A,B,C][X,Y]]) 

应该导致与最大尺寸的输出,填充缺失的尺寸与零,同时增加。

大熊猫包是否可以完成上述任务,也可以用熊猫给出答案? This link explains大熊猫有调整函数和重建索引的功能来完成上述任务,但是如何实现自动重新调整和对齐的加法,有利于最大尺寸?

+0

你期望的答案是?这是有效的拉里代码? –

+0

@AndyHayden没有例子是我想要的 – stackit

+0

你可以给一个小的,独立的工作示例。由于多种原因,ADD(...)会引发异常。 –

回答

1

pandas重写算术运算符以完成您想要的操作。目前,没有选择来控制索引加入。他们在默认情况下进行外部连接:

In [39]: a = DataFrame([[1, 2], [3, 4]], columns=list('CD'), index=list('AB')) 

In [40]: b = DataFrame([[1, 2, 5], [1, 3, 4], [6, 7, 8]], columns=list('CDY'), index=list('ABX')) 

In [41]: a + b 
Out[41]: 
    C D Y 
A 2 4 NaN 
B 4 7 NaN 
X NaN NaN NaN 

对此有an open issue on GitHub

+0

这两个矩阵有不同的标签排序,它会工作,它会自动对齐顺序的标签:外部,右,内部联接重叠和冲突? – stackit

+0

每个维度中的标签是什么? –

+0

每个维度按不同的顺序具有不同的标签。 larry在添加例如la.add(lar1,lar2,join ='inner')的同时处理它,但期望lar1和lar2的尺寸相同 – stackit

0

我想出了答案,而无需诉诸大熊猫,但还是想知道如何同样可以在熊猫来完成,该解决方案是使用OUTER JOIN:

 
>>>a=larry([[1,2],[3,4]],label=[['A','B'],['C','D']]) 

>>> b=larry([[1,2,5],[1,3,4],[6,7,8]],label=[['A','B','X'],['C','D','Y']]) 
>>> a 
label_0 
    A 
    B 
label_1 
    C 
    D 
x 
array([[1, 2], 
     [3, 4]]) 
>>> c=la.add(a,b) 
>>> c 
label_0 
    A 
    B 
label_1 
    C 
    D 
x 
array([[2, 4], 
     [4, 7]]) 
>>> c=la.add(a,b,join='outer') 
>>> c 
label_0 
    A 
    B 
    X 
label_1 
    C 
    D 
    Y 
x 
array([[ 2., 4., nan], 
     [ 4., 7., nan], 
     [ nan, nan, nan]]) 




>>> c=la.add(a,b,join='outer',missone=0) 
>>> c 
label_0 
    A 
    B 
    X 
label_1 
    C 
    D 
    Y 
x 
array([[ 2., 4., 5.], 
     [ 4., 7., 4.], 
     [ 6., 7., 8.]]) 
>>> a 
label_0 
    A 
    B 
label_1 
    C 
    D 
x 
array([[1, 2], 
     [3, 4]]) 
>>> b 
label_0 
    A 
    B 
    X 
label_1 
    C 
    D 
    Y 
x 
array([[1, 2, 5], 
     [1, 3, 4], 
     [6, 7, 8]]) 
>>>