You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中计算每行数据占该行总计的百分比?

在Pandas中计算每行数据占该行总计的百分比

针对你的需求,这里有两种高效的实现方式,尤其适合处理包含数百列的DataFrame:

方法一:手动指定非日期列

先构造示例数据:

import pandas as pd

df = pd.DataFrame({
    'date': ['2020-01-01', '2020-02-01'],
    'A': [10, 20],
    'B': [40, 60],
    'C': [50, 100]
})

然后执行计算:

# 排除date列,选择所有数据列
data_cols = df.columns.drop('date')
# 计算每行的总和
row_sums = df[data_cols].sum(axis=1)
# 计算每行各列占比,保留两位小数
df[data_cols] = df[data_cols].div(row_sums, axis=0).round(2)

执行后得到结果:

date     A     B     C
0  2020-01-01  0.10  0.40  0.50
1  2020-02-01  0.11  0.33  0.56

注:示例中C列的0.55是对100/180≈0.555...的近似,使用round(2)会得到0.56,若需要和示例完全一致,可以调整精度或直接保留更多小数后截断。

方法二:自动识别数值列(更适合数百列场景)

如果你的DataFrame里除了date还有其他非数值列,或者不想手动罗列数据列,可以自动筛选数值列:

# 自动选择所有数值类型的列
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
row_sums = df[numeric_cols].sum(axis=1)
df[numeric_cols] = df[numeric_cols].div(row_sums, axis=0).round(2)

这种方式无需手动指定列名,能自动适配任意数量的数值列,非常适合你的数百列场景。

关键说明

  • 使用div(row_sums, axis=0)实现按行除法,Pandas的向量化操作比循环遍历高效得多,处理大数据集速度更快
  • 如果不需要保留原始数据,可以直接在原DataFrame上修改,无需创建副本
  • 可以根据需求调整round()的参数来控制小数位数,或者去掉round()保留完整精度

内容的提问来源于stack exchange,提问作者titu84hh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:55:22