如何为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
相关产品推荐
相关产品推荐

