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

如何在Pandas中实现DataFrame值除以首行值且不修改首行并保留两位小数?

解决方案:保留首行并计算其余行的占比

要实现你的需求,核心思路是只对首行以外的行进行运算,同时确保结果保留两位小数。下面提供几种简洁的实现方式:

方法1:直接使用行索引操作(最直观)

这种方式直接定位首行和其他行,计算后合并,逻辑清晰:

import pandas as pd
import numpy as np

# 你的原始DataFrame
df1 = pd.DataFrame(np.array([[200,200],[40,40],[80,80],[80,80]]), columns= ["Erkek","Kadin"], index=["Base","AB","C1","C2"])

# 1. 提取首行(Base行),保留原始值
base_row = df1.iloc[0:1]

# 2. 对其余行计算:每行除以首行对应列的值,乘以100转为百分比,保留两位小数
calculated_rows = df1.iloc[1:].div(base_row.iloc[0], axis=1) * 100
calculated_rows = calculated_rows.round(2)

# 3. 合并首行和计算后的行
result_df = pd.concat([base_row, calculated_rows])

# 如果需要让首行也显示为两位小数(比如200.00),可以统一格式化
result_df = result_df.round(2)

方法2:使用apply自定义函数(更灵活)

如果需要复用逻辑,可以写一个自定义函数,针对每一列处理首行和其他行:

def calculate_percentage(col):
    # 首行保持不变,其余行除以首行对应值并转为百分比
    col.iloc[1:] = (col.iloc[1:] / col.iloc[0]) * 100
    # 保留两位小数
    return col.round(2)

# 应用函数到每一列
result_df = df1.apply(calculate_percentage)

方法3:一行代码完成(高效简洁)

利用Pandas的广播特性,直接对非首行进行运算:

df1.iloc[1:] = (df1.iloc[1:] / df1.iloc[0]) * 100
result_df = df1.round(2)

最终效果

执行后你的DataFrame会变成:

ErkekKadin
Base200.00200.00
AB40.0040.00
C180.0080.00
C280.0080.00

如果不需要转为百分比(比如你要的是0.40而非40.00),只需要去掉* 100即可。

内容的提问来源于stack exchange,提问作者Hüseyin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:39:47