我使用larry包用于python的2D标记矩阵,可能有不同的尺寸,我需要添加标签对齐的标签。拉里包装可以解决这个问题,但是需要相同的尺寸来添加两个基质。
但是对于我的任务,每个维度都有不同的标签。拉里在添加
时处理它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]])
应该导致输出具有最大尺寸,在添加时填充缺少尺寸为零。
pandas包可以完成上述任务,也可以使用pandas给出答案吗? This link explains pandas已经对齐函数和重新索引函数来完成上述操作,但是如何通过自动重新标注和对齐来实现添加,有利于最大尺寸?
答案 0 :(得分: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。
答案 1 :(得分: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]]) >>>