我有一个长,宽,浅的熊猫面板。实际上它更大但是为了便于举例,让我们说它是2x5x6:
panel=pd.Panel(pd.np.random.rand(2,3,6))
我的系列是最短尺寸的长度 - 在这种情况下为2:
series=pd.Series([0,1])
我希望通过在其他两个轴上广播系列来将面板乘以系列。
使用panel.mul
不起作用,因为只能Panel
或DataFrame
,我认为
panel.mul(series) # returns None
使用panel.apply(lambda x: x.mul(series), axis=0)
有效,但似乎在每个系列组合中进行计算,在这种情况下3x6 = 18,但实际上> 1m系列,因此非常慢。
使用pd.np.multiply
似乎需要一个非常尴尬的构造:
pd.np.multiply(panel, pd.np.asarray(series)[:, pd.np.newaxis, pd.np.newaxis])
有更简单的方法吗?
答案 0 :(得分:1)
我认为你的最后一种做法在概念上没有任何错误(我想不出更简单的方法)。写一个更惯用的方法是
import numpy as np
panel.values * (series.values[:,np.newaxis,np.newaxis])
使用values
返回pandas对象的底层numpy数组。