我正在努力完成一项本应简单的任务,但它并不像我想象的那样有效。我有两个数字数据帧A和B,其中包含多索引和以下列:
A = A B C D
X 1 AX1 BX1 CX1 DX1
2 AX2 BX2 CX2 DX2
3 AX3 BX3 CX3 DX3
Y 1 AY1 BY1 CY1 DY1
2 AY2 BY2 CY2 DY2
3 AY3 BY3 CY3 DY3
B = A B C D
X 1 a AX1a BX1a CX1a DX1a
b AX1b BX1b CX1b DX1b
c AX1c BX1c CX1c DX1c
2 a AX2a BX2a CX2a DX2a
b AX2b BX2b CX2b DX2b
c AX2c BX2c CX2c DX2c
3 a AX3a BX3a CX3a DX3a
b AX3b BX3b CX3b DX3b
c AX3c BX3c CX3c DX3c
Y 1 a AY1a BY1a CY1a DY1a
b AY1b BY1b CY1b DY1b
c AY1c BY1c CY1c DY1c
2 a AY2a BY2a CY2a DY2a
b AY2b BY2b CY2b DY2b
c AY2c BY2c CY2c DY2c
3 a AY3a BY3a CY3a DY3a
b AY3b BY3b CY3b DY3b
c AY3c BY3c CY3c DY3c ## Heading ##
我想将A*B广播乘以B的最内层,我想要得到的数据帧R,如下所示:
^{pr2}$我尝试使用pandas multiply函数和level关键字,方法是:
b.multiply(a, level=[0,1])
但它抛出了一个错误:“TypeError:Join在两个多索引对象之间的级别上是不明确的”
做这个手术的正确方法是什么?在
请注意,我并不是声称这是做这个手术的正确方法,只是说这是一种方法。我自己以前也有过不知道正确的广播模式的问题。:-/
简短的说法是,我最终手动进行广播,并创建一个适当对齐的中间对象:
这是通过使用B的匹配部分索引到A,然后将索引设置为匹配。如果我再聪明一点,我就可以想出一种本地的方法来实现这一点,但我还没有。:-(
我只需在较小形状的} 来匹配较大的
DF
上使用^{DF's
形状的索引,并向前填充其中的值。然后做乘法运算。在演示:
准备一些数据:
^{pr2}$小
DF
:大
DF
:在确保两者在所有级别上共享一个共同的索引轴后将它们相乘:
现在您甚至可以在^{} 中提供
level
参数,以便在这些匹配的索引处进行广播。在建议的方法
我们正在讨论
broadcasting
,因此我想在这里介绍{a1}。在解决方案代码如下-
基本思路:
1]将视图作为多维数组放入数据帧中。多维性是根据multindex数据帧的层次结构来维护的。因此,第一个数据帧有三个级别(包括列),第二个数据帧有四个级别。因此,我们有}对应于输入数据帧},结果{}和{}分别具有{}和{}维。在
a0
和{df0
和{2)现在是广播部分。我们只需通过在第三个位置引入一个新轴,将
a0
扩展为4维。这个新轴将与df1
中的第三个轴匹配。这允许我们执行元素乘法。在3)最后,为了得到输出的multindex数据帧,我们只需对产品进行整形。在
样本运行:
1)输入数据帧-
^{pr2}$2)输出数据帧-
标杆管理
相关问题 更多 >
编程相关推荐