首页 > 解决方案 > 乘以熊猫中的前导对角线值?

问题描述

我正在尝试将 pandas 数据框中的前导对角线相乘,但我不确定如何以计算上合理的方式进行。

df =       [ 3  4  5
             6  7  8
             9 10 11]

ouput_df = [231 32 5
            60  77 8
             9  10 11]

解释 - 第一个元素为 3 * 7 * 11,第二个元素为 4 * 8,第五个元素为 7 * 11 等等,

注意:我正在处理的矩阵不是方阵,而是矩形矩阵。

标签: pythonpandasnumpy

解决方案


这是一个基于 NumPy 的 -

def cumprod_upper_diag(a):
    m,n = a.shape
    mask = ~np.tri(m,n, dtype=bool)
    p = np.ones((m,n),dtype=a.dtype)
    p[mask[:,::-1]] = a[mask]
    a[mask] = p[::-1].cumprod(0)[::-1][mask[:,::-1]]
    return a

a = df.to_numpy(copy=False) # For older versions : a = df.values
out = a.copy()
cumprod_upper_diag(out)
cumprod_upper_diag(out.T)
out.ravel()[::a.shape[1]+1] = out.ravel()[::out.shape[1]+1][::-1].cumprod()[::-1]
out_df = pd.DataFrame(out)

推荐阅读