You need to enable JavaScript to run this app. pandas中对指定列行值做归一化实现行和为1的方法
优惠活动
大模型
产品
解决方案
定价
更多

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):按行维度计算指定列的总和,返回每行对应的和值Series
  • div(..., 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 18:36:03