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

如何为Pandas DataFrame的指定% Paid行添加后缀?

问题描述

我想给Pandas DataFrame中的**% Paid**行所有值添加后缀(比如%),但目前只会给列名加后缀。有没有办法直接给特定行的所有值批量添加后缀?

示例代码

import pandas as pd

d={
    ("Payments","Jan","NOS"):[],
    ("Payments","Feb","NOS"):[],
    ("Payments","Mar","NOS"):[],
}
d = pd.DataFrame(d)

d.loc["Total",("Payments","Jan","NOS")] = 9991
d.loc["Total",("Payments","Feb","NOS")] = 3638
d.loc["Total",("Payments","Mar","NOS")] = 5433

d.loc["Paid",("Payments","Jan","NOS")] = 139
d.loc["Paid",("Payments","Feb","NOS")] = 123
d.loc["Paid",("Payments","Mar","NOS")] = 20

d.loc["% Paid",("Payments","Jan","NOS")] = round((d.loc["Paid",("Payments","Jan","NOS")] / d.loc["Total",("Payments","Jan","NOS")])*100)
d.loc["% Paid",("Payments","Feb","NOS")] = round((d.loc["Paid",("Payments","Feb","NOS")] / d.loc["Total",("Payments","Feb","NOS")])*100)
d.loc["% Paid",("Payments","Mar","NOS")] = round((d.loc["Paid",("Payments","Mar","NOS")] / d.loc["Total",("Payments","Mar","NOS")])*100)

我目前只能逐个单元格转换后加后缀,虽然可行但不够高效:

d.loc["% Paid",("Payments","Jan","NOS")] = str(round((d.loc["Paid",("Payments","Jan","NOS")] / d.loc["Total",("Payments","Jan","NOS")])*100)) + '%'
d.loc["% Paid",("Payments","Feb","NOS")] = str(round((d.loc["Paid",("Payments","Feb","NOS")] / d.loc["Total",("Payments","Feb","NOS")])*100)) + '%'
d.loc["% Paid",("Payments","Mar","NOS")] = str(round((d.loc["Paid",("Payments","Mar","NOS")] / d.loc["Total",("Payments","Mar","NOS")])*100)) + '%'

解决方案

有两种常用方法可以批量给特定行添加后缀,根据需求选择:

方法1:直接修改数据类型为字符串并添加后缀

如果不需要后续对**% Paid**行的数值进行计算,可以直接将整行转为字符串后拼接后缀:

# 先批量计算% Paid行的数值
d.loc["% Paid"] = round((d.loc["Paid"] / d.loc["Total"]) * 100)
# 批量添加%后缀
d.loc["% Paid"] = d.loc["% Paid"].astype(str) + '%'

一行代码即可完成整行的后缀添加,无需逐个单元格处理。

方法2:用Styler格式化显示(不修改原始数据)

如果需要保留**% Paid**行的数值类型以便后续计算,推荐用Pandas的Styler来格式化显示——原始数据仍为数值,仅展示时带后缀:

# 先批量计算% Paid行的数值
d.loc["% Paid"] = round((d.loc["Paid"] / d.loc["Total"]) * 100)

# 定义格式化函数,仅对% Paid行添加后缀
def format_percent(row):
    if row.name == "% Paid":
        return [f"{val}%" for val in row]
    return row

# 应用格式化并显示
styled_df = d.style.apply(format_percent, axis=1)
display(styled_df)

这种方式兼顾显示需求与数据可用性,灵活性更强。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:56:05