如何用Python对DataFrame两列做交叉除法生成指定矩阵?
Python实现A/B交叉除法矩阵
核心逻辑利用数组广播机制,无需手写双层循环,即可快速生成行列索引均为原数据集Index的交叉计算矩阵。
实现步骤
- 首先加载/构造原始数据集,将
Index列设为数据框索引 - 将A列转换为n行1列的二维数组,B列保持1行n列的结构,通过numpy/pandas的广播特性自动完成逐元素交叉除法
- 给计算结果赋值行、列索引,按需保留指定位数的小数即可
完整代码
import pandas as pd # 构造原始数据集 df = pd.DataFrame({ 'Index': ['T-1', 'T-2', 'T-3', 'T-4'], 'A': [4, 18, 24, 49], 'B': [2, 3, 4, 7], 'C': [2, 6, 6, 7] }).set_index('Index') # 交叉除法计算:每行取对应A值,每列取对应B值做除法 cross_matrix = pd.DataFrame( # A列转为4行1列结构,和1行4列的B列做广播除法 df['A'].to_numpy().reshape(-1, 1) / df['B'].to_numpy(), index=df.index, columns=df.index ).round(2) print(cross_matrix)
运行输出
T-1 T-2 T-3 T-4 T-1 2.00 1.33 1.00 0.57 T-2 9.00 6.00 4.50 2.57 T-3 12.00 8.00 6.00 4.00 T-4 24.50 16.33 12.25 7.00
注:你给出的示例期望结果中T-1行T-3列的0为笔误,按照A/B计算逻辑,T-1行A值为4、T-3列B值为4,正确计算结果为1。
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

