我有一个长、宽、浅的 Pandas 面板。实际上它更大,但为了举例方便,假设它是 2x5x6:
panel=pd.Panel(pd.np.random.rand(2,3,6))
我有一个 Series,它是最短维度的长度 - 在本例中为 2:
series=pd.Series([0,1])
我想通过在其他两个轴上广播系列来将面板乘以系列。
使用
panel.mul
是行不通的,因为我认为它只能采用Panel
或DataFrame
panel.mul(series) # 返回 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])
有没有更简单的方法?
最佳答案
我不认为你最后的做法在概念上有什么问题(而且我想不出更简单的方法)。一种更惯用的写法是
import numpy as np
panel.values * (series.values[:,np.newaxis,np.newaxis])
使用 values
返回 pandas 对象的底层 numpy 数组。
关于python - 在 Pandas 面板上广播乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427899/