Pandas是否有内置函数将DataFrame值转换为百分比?
Pandas实现DataFrame值转百分比(行/列/层级支持)
Pandas没有专门的内置函数一键将DataFrame中的值转换为百分比形式,但可以通过div()与sum()(或groupby().sum())的组合,轻松实现按行、按列甚至多层级的百分比转换需求,再配合样式格式化即可直观展示百分比。
1. 按列转换为百分比
计算每个值占其所在列总和的比例,再格式化为百分比:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'A': [10, 20, 30], 'B': [5, 15, 25] }) # 按列计算比例(小数形式) col_proportions = df.div(df.sum(axis=0), axis=1) # 格式化为带两位小数的百分比显示 col_percent_display = col_proportions.style.format("{:.2%}")
df.sum(axis=0):计算每列的总和div(..., axis=1):确保按列对齐进行除法运算
2. 按行转换为百分比
计算每个值占其所在行总和的比例:
# 按行计算比例(小数形式) row_proportions = df.div(df.sum(axis=1), axis=0) # 格式化为带一位小数的百分比显示 row_percent_display = row_proportions.style.format("{:.1%}")
df.sum(axis=1):计算每行的总和div(..., axis=0):确保按行对齐进行除法运算
3. 多层级索引的复杂转换
针对带MultiIndex的DataFrame,可按指定层级分组计算百分比:
# 创建多层级索引示例 midx = pd.MultiIndex.from_tuples( [('Group1', 'X'), ('Group1', 'Y'), ('Group2', 'X'), ('Group2', 'Y')], names=['Group', 'Subgroup'] ) df_multi = pd.DataFrame({'Value': [10, 20, 15, 25]}, index=midx) # 按Group层级计算每个Subgroup占该Group总和的百分比 multi_proportions = df_multi.div(df_multi.groupby(level='Group').sum(), level='Group') # 格式化显示 multi_percent_display = multi_proportions.style.format("{:.2%}")
groupby(level='Group').sum():按Group层级分组求和div(..., level='Group'):按指定层级对齐进行除法运算
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

