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

如何在Pandas分组堆叠条形图中重分类标签(无需修改数据集)

在Pandas中为Groupby生成的条形图自定义分类标签(无需修改原数据集)

直接上可行方案,两种思路都不用改动原数据集:

方案1:绘图后修改Matplotlib图例

Pandas绘图底层依赖Matplotlib,所以可以拿到绘图返回的Axes对象,直接替换图例标签:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dt = pd.DataFrame(np.random.randint(0,3,size=(10, 3)), columns=list('ABC'))
# 绘图并获取轴对象
ax = dt.groupby('A')['B'].value_counts().unstack(0).plot(kind='bar')

# 定义标签映射关系
label_map = {0: 'good', 1: 'bad', 2: 'average'}

# 获取原有图例,替换标签文本
handles, old_labels = ax.get_legend_handles_labels()
new_labels = [label_map[int(lbl)] for lbl in old_labels]
ax.legend(handles, new_labels)

plt.show()

这种方式完全在绘图层面操作,原数据集一丝不动,适合只需要调整展示效果的场景。

方案2:临时重命名索引(不污染原数据)

如果想在Pandas处理链里完成,可以对分组后的结果临时重命名索引,再绘图——这个修改只作用于当前的临时DataFrame,原数据集不受影响:

import pandas as pd
import numpy as np

dt = pd.DataFrame(np.random.randint(0,3,size=(10, 3)), columns=list('ABC'))

label_map = {0: 'good', 1: 'bad', 2: 'average'}

# 链式调用:分组统计 → 临时重命名索引 → 绘图
(
    dt.groupby('A')['B']
    .value_counts()
    .unstack(0)
    .rename(index=label_map)
    .plot(kind='bar')
)

关于最佳实践

  • 若只是为了绘图展示调整标签:优先用上面两种方法,别碰原数据集。保持原始数据的完整性,避免后续分析时因为标签改动产生误解。
  • 若整个分析流程都需要用这些自定义标签(比如后续统计、报表都要用到good/bad/average):那直接修改数据集的对应列更高效,比如把B列转为带自定义标签的分类类型:
    dt['B'] = dt['B'].map(label_map).astype('category')
    
    这样后续所有基于B列的操作都会自动用自定义标签,不用重复写映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:01:29