如何在Pandas中按周和课程计算出勤为1的占比?
解决按周&课程分组计算出勤占比的问题
你需要对数据按周和课程分组,统计每组中出勤值为1的记录占该组总记录的比例,并且输出类似透视表的样式。下面用Pandas来实现这个需求:
步骤1:加载数据(假设你已经有DataFrame)
首先确保你已经导入Pandas并加载了数据,比如:
import pandas as pd # 替换成你的数据加载方式,比如读取CSV/Excel df = pd.read_csv("your_data_file.csv")
步骤2:计算分组占比(两种输出形式)
形式1:长表格式(分组后按行展示)
如果需要按周、课程分行展示占比,可以用groupby结合mean()(因为出勤值是1/0,均值就是1的占比):
# 按周和课程分组,计算出勤为1的占比 grouped_result = df.groupby(["week", "course"])["attendance"].mean().reset_index() # 重命名列名更直观 grouped_result = grouped_result.rename(columns={"attendance": "attendance_rate"}) # 可选:将占比转为百分比格式(保留两位小数) grouped_result["attendance_rate"] = grouped_result["attendance_rate"].apply(lambda x: f"{x:.2%}") print(grouped_result)
形式2:透视表格式(和你期望的输出样式一致)
如果想要行是周、列是课程的透视表样式,用pivot_table更直接:
# 创建透视表,计算每组的出勤占比 pivot_result = df.pivot_table( index="week", # 行:周 columns="course", # 列:课程 values="attendance", # 计算的字段:出勤 aggfunc="mean" # 聚合函数:均值即占比 ) # 可选:转为百分比格式 pivot_result = pivot_result.applymap(lambda x: f"{x:.2%}") print(pivot_result)
注意事项
- 请根据你实际的列名替换代码中的
week、course、attendance,确保和你的DataFrame列名一致。 - 如果你的出勤值不是1/0,而是其他标记(比如"出勤"/"缺勤"),可以先做映射:
df["attendance"] = df["attendance"].map({"出勤":1, "缺勤":0})再执行上述代码。
内容的提问来源于stack exchange,提问作者Dipam Soni
相关产品推荐
相关产品推荐

