在pandas Panel中广播乘法

时间:2015-10-30 02:51:44

标签: python numpy pandas

我有一个长,宽,浅的熊猫面板。实际上它更大但是为了便于举例,让我们说它是2x5x6:

panel=pd.Panel(pd.np.random.rand(2,3,6))

我的系列是最短尺寸的长度 - 在这种情况下为2:

series=pd.Series([0,1])

我希望通过在其他两个轴上广播系列来将面板乘以系列。

  1. 使用panel.mul不起作用,因为只能PanelDataFrame,我认为

    panel.mul(series) # returns None

  2. 使用panel.apply(lambda x: x.mul(series), axis=0)有效,但似乎在每个系列组合中进行计算,在这种情况下3x6 = 18,但实际上> 1m系列,因此非常慢。

  3. 使用pd.np.multiply似乎需要一个非常尴尬的构造:

    pd.np.multiply(panel, pd.np.asarray(series)[:, pd.np.newaxis, pd.np.newaxis])

  4. 有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

我认为你的最后一种做法在概念上没有任何错误(我想不出更简单的方法)。写一个更惯用的方法是

import numpy as np
panel.values * (series.values[:,np.newaxis,np.newaxis])

使用values返回pandas对象的底层numpy数组。