pandas中对指定列行值做归一化实现行和为1的方法
Pandas 指定列实现行和为1的归一化方案
核心逻辑
要让指定列的每行数值总和为1,本质是对目标列做行归一化:每一行的目标列数值除以该行在目标列上的总和,即可自然得到行和为1的结果。
完整实现步骤
1. 构造测试数据
先还原问题中的示例原始数据:
import pandas as pd # 构造示例DataFrame data = { 'columnA': ['A', 'B', 'C'], 'columnB': [1, 1, 0], 'columnC': [0, 1, 0], 'columnD': [0, 0, 1], 'columnE': [10, 15, 10] } df = pd.DataFrame(data)
2. 执行归一化处理
# 定义需要调整行和的目标列 target_cols = ['columnB', 'columnC', 'columnD'] # 计算每行在目标列的总和 row_sum = df[target_cols].sum(axis=1) # 按行做除法归一化,同时处理除零异常 df[target_cols] = df[target_cols].div(row_sum, axis=0).fillna(0)
提示:如果需要保留原始数据不被修改,可先通过
df_new = df.copy()复制副本,后续操作针对副本执行即可。
代码参数说明
sum(axis=1):按行维度计算指定列的总和,返回每行对应的和值Seriesdiv(..., axis=0):指定按行对齐做除法,避免广播逻辑错误fillna(0):若某行目标列全为0,除法会产生NaN,这里统一填充为0,可根据业务需求调整填充值
处理结果验证
运行上述代码后,输出的DataFrame与目标效果完全一致:
columnA columnB columnC columnD columnE 0 A 1.0 0.0 0.0 10 1 B 0.5 0.5 0.0 15 2 C 0.0 0.0 1.0 10
内容的提问来源于stack exchange,提问作者PV8
相关产品推荐
相关产品推荐

