2013-09-23 3 views
0

У меня есть 2D-маркированные матрицы с использованием пакета larry для python с различными размерами. Мне нужно добавить их с выровненными метками. Пакет larry позаботится об этом, но ожидает таких же размеров для добавления двух матриц.Добавить матрицы с различными размерами и ярлыками

Но для моей задачи каждое измерение имеет разные метки в другом порядке. Larry обрабатывает его, добавляя

например:

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]]) 

должен привести к выходу с максимальными размерами, дополняя недостающие размеры с нулем при добавлении.

Может ли пакет pandas выполнить вышеуказанную задачу, можно также дать ответ, используя панды? This link explains, что у pandas есть функции выравнивания и функции reindex для выполнения вышеизложенного, но как выполнить добавление с автоматическим перераспределением и выравниванием, что соответствует максимальным размерам?

+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

Я понял ответ, не прибегая к пандам, но все же интересно знать, как то же самое может быть достигнуто в панде, решение заключается в использовании внешнего соединения:

 
>>>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]]) 
>>> 

Смежные вопросы