python - 在 Pandas 面板上广播乘法

标签 python numpy pandas

我有一个长、宽、浅的 Pandas 面板。实际上它更大,但为了举例方便,假设它是 2x5x6:

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

我有一个 Series,它是最短维度的长度 - 在本例中为 2:

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

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

  1. 使用 panel.mul 是行不通的,因为我认为它只能采用 PanelDataFrame

    panel.mul(series) # 返回 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])

有没有更简单的方法?

最佳答案

我不认为你最后的做法在概念上有什么问题(而且我想不出更简单的方法)。一种更惯用的写法是

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

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

关于python - 在 Pandas 面板上广播乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427899/

相关文章:

python - 类型错误 : linear(): argument 'input' (position 1) must be Tensor, 不是 str

python - 如何在 Python 中调用 scipy.optimize.fmin_cg(func) 的函数

pandas - JupyterLab 无花果不显示。它显示空白结果(但在 jupyternotebook 上工作正常)

python - 根据行值将一行插入 Pandas 数据框中?

python - 将 json 数据(未定义/困惑)转换为 DataFrame 的正确方法是什么?

python - Spark Streaming - 滑动窗口和不同的使用

python - Discord.py 如何制作干净的对话树?

python - 如何使用 Python 插入 3D 曲面图(2D 数组)的缺失值(未定义区域)?

python - python中二维和一维数组的元素明智乘法

python - 如何将序数值转换为分类值?