python - 乘以熊猫中的前导对角线值?
问题描述
我正在尝试将 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 等等,
注意:我正在处理的矩阵不是方阵,而是矩形矩阵。
解决方案
这是一个基于 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)
推荐阅读
- multithreading - Qt 中的序列化与线程安全有何关系?
- python - 自定义 alexa 技能无法识别动态日期值
- python - Mongoengine 聚合不像 mongo 那样工作
- javascript - 不使用 Object.entries() 返回键值对数组的数组
- android - android中的依赖问题
- teradata - 失败 2616 计算过程中发生数值溢出
- java - 无法将存储在 Firebase 数据库中的图像(静态)提取到我的应用程序中
- php - PHP / MySQL:图像成功保存到数据库但无法在网页上显示
- sqlite - 我可以像android中的sqlite密码一样将密码粘贴到Room数据库中吗?
- unity3d - 活跃的布娃娃角色仍然站在地上