2013-09-23 262 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]]) 
>>>