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

Python DataFrame分组条形图制作求助:按sex与age分别可视化

分组条形图实现方案(按sex和age展示target分布)

你要基于以下结构的DataFrame制作分组条形图,同时按sex和age维度展示target的分布,但用df.groupby('sex')[target].value_counts().plot.bar(legend=True)代码没得到预期效果:

agesextarget
25m0
33f0
20m1
37f1
40f1

问题分析

你之前的代码只按sex分组统计target,完全没结合age维度,肯定出不来同时展示两个维度的分组条形图。要实现预期效果,得先把数据处理成age、sex、target三者的交叉统计形式,再绘图。

解决方案

先把DataFrame实例化(方便你直接测试):

import pandas as pd

data = {
    'age': [25, 33, 20, 37, 40],
    'sex': ['m', 'f', 'm', 'f', 'f'],
    'target': [0, 0, 1, 1, 1]
}
df = pd.DataFrame(data)

方案1:按年龄+性别展示Target总计数

用pd.crosstab构建交叉表,直接生成分组条形图:

import matplotlib.pyplot as plt

# 构建交叉表:行是年龄,列是性别,值为对应组的Target计数
cross_tab = pd.crosstab(index=df['age'], columns=df['sex'], values=df['target'], aggfunc='count').fillna(0)
# 绘制分组条形图
cross_tab.plot(kind='bar', figsize=(8, 5))
plt.title('Target分布(按年龄、性别分组)')
plt.xlabel('年龄')
plt.ylabel('Target计数')
plt.legend(title='性别')
plt.tight_layout()
plt.show()

方案2:按年龄+性别拆分展示Target具体值

如果要每个年龄-性别组下,分别展示target=0和target=1的数量,用下面的代码:

# 构建交叉表:行是年龄,列是(性别,Target值),值为对应组的数量
cross_tab_target = pd.crosstab(index=df['age'], columns=[df['sex'], df['target']], aggfunc='count').fillna(0)
# 绘制分组条形图
cross_tab_target.plot(kind='bar', figsize=(10, 6))
plt.title('Target值分布(按年龄、性别分组)')
plt.xlabel('年龄')
plt.ylabel('数量')
plt.legend(title='性别-Target')
plt.tight_layout()
plt.show()

根据你预期的图表样式,选对应的方案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:05:38