Pandas中如何实现DataFrame列总和除以所在行总和的计算
pandas实现DataFrame「列总和/对应行总和」的单元格转换
实现思路
利用pandas的数组广播机制,无需编写逐行逐列的循环逻辑:
- 先按列聚合得到每列的总和,结果为1行N列的序列
- 再按行聚合得到每行的总和,将其转为N行1列的列向量
- 两个数组直接做除法时,pandas会自动广播为和原DataFrame同维度的结果,每个单元格(i,j)的取值刚好为第j列总和除以第i行总和,完全匹配计算规则。
完整实现代码
import pandas as pd # 构造题目给出的初始3行3列DataFrame df = pd.DataFrame([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) # 核心计算逻辑 col_sum = df.sum(axis=0) # 计算每列总和,对应示例中列0/1/2总和为12、15、18 row_sum = df.sum(axis=1).values.reshape(-1, 1) # 计算每行总和并转为列向量,对应行0/1/2总和为6、15、24 result = col_sum / row_sum # 广播运算得到最终结果
结果验证
打印result可得到和题目预期完全一致的输出:
0 1 2 0 2.0 2.500 3.00 1 0.8 1.000 1.20 2 0.5 0.625 0.75
如果需要直接覆盖原DataFrame的数值,直接执行df = col_sum / row_sum即可,原索引、列名会自动保持对齐。
内容的提问来源于stack exchange,提问作者indian cluster
相关产品推荐
相关产品推荐

