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

基于列分组DataFrame并生成科目状态柱状图的技术求助(数据科学新手)

解决方案:统计科目状态出现次数并生成指定格式结果

嘿,作为数据科学新手,这个需求其实用pandas就能轻松搞定,我来一步步帮你实现:

步骤1:导入必要工具

首先我们需要用到pandas库来处理DataFrame,先导入它:

import pandas as pd

步骤2:读取CSV文件

假设你的CSV文件名为students.csv,用下面的代码读取并生成DataFrame:

df = pd.read_csv('students.csv')

步骤3:转换数据格式(宽表转长表)

因为我们需要按科目来统计状态,而原始数据里每个科目是单独的列,所以得把宽表转换成每行对应一个科目+状态的长表,这里用melt函数:

# 将Name作为标识列,其他列(科目)转为Subject,对应的值转为Status
melted_df = df.melt(id_vars=['Name'], var_name='Subject', value_name='Status')

步骤4:分组统计状态次数

现在我们可以按Subject和Status分组,统计每组的数量:

# 分组后用size()计数,重置索引并重命名计数列为Count
result = melted_df.groupby(['Subject', 'Status']).size().reset_index(name='Count')

步骤5:调整格式匹配期望输出

注意到你期望里的科目是Sports而不是原始的sports,我们可以替换一下名称,再按科目排序让结果更清晰:

# 修正科目名称
result['Subject'] = result['Subject'].replace('sports', 'Sports')
# 按科目排序,对齐期望格式
result = result.sort_values('Subject').reset_index(drop=True)

查看最终结果

运行print(result)就能得到你想要的格式:

Subject Status  Count
0    English   Pass      4
1    English     NA      1
2      Maths   Pass      5
3    Science   Pass      2
4    Science   Fail      3
5     Sports   Pass      3
6     Sports     NA      2

拓展:绘制柱状图

有了这个结果,你可以用seaborn或者matplotlib轻松画出柱状图:

import seaborn as sns
import matplotlib.pyplot as plt

# 绘制分组柱状图
sns.barplot(data=result, x='Subject', y='Count', hue='Status')
plt.title('Subject Status Distribution')
plt.xlabel('Subjects')
plt.ylabel('Number of Students')
plt.show()

这样就能直观展示每个科目不同状态的学生数量啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:37:49