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

如何为DataFrame所有列的取值计数生成堆叠条形图

处理DataFrame并生成堆叠条形图方案

步骤1:统计各列取值出现次数

提供两种高效统计方式,根据习惯选择:

  • 方法一:直接批量统计每列并转置结果
import pandas as pd

# 假设你的DataFrame名为df
count_df = df.apply(pd.Series.value_counts).fillna(0).astype(int)

得到的count_df会以yes/no/na/not specified为行索引,原DataFrame的列为列名,每个单元格对应取值的出现次数。

  • 方法二:重塑数据后分组统计
melted_df = df.melt(var_name='列名', value_name='取值')
count_df = melted_df.groupby(['列名', '取值']).size().unstack(fill_value=0)

这种方式更直观,后续可视化时可直接复用中间数据。

步骤2:生成堆叠条形图

用Matplotlib实现

import matplotlib.pyplot as plt

# 设置绘图风格
plt.style.use('seaborn-v0_8')

# 绘制堆叠条形图
count_df.plot(kind='bar', stacked=True, figsize=(12, 6))

# 完善图表元素
plt.title('各列取值分布堆叠条形图')
plt.xlabel('DataFrame列名')
plt.ylabel('出现次数')
plt.legend(title='取值类型', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()

# 显示或保存图表
plt.show()
# plt.savefig('stacked_bar_plot.png')

用Seaborn实现

import seaborn as sns

plt.figure(figsize=(12, 6))
sns.barplot(data=melted_df, x='列名', hue='取值', estimator=len, errorbar=None)
plt.title('各列取值分布堆叠条形图')
plt.xlabel('DataFrame列名')
plt.ylabel('出现次数')
plt.legend(title='取值类型', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()

关键注意事项

  • 如果DataFrame中的na是pandas缺失值(NaN),先统一转为字符串:df = df.fillna('na')
  • 列名过多导致x轴标签重叠时,添加plt.xticks(rotation=45)旋转标签角度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:50:29