如何用Pandas编写函数,按性别计算成绩均值并返回字典
解决方案:按性别计算学生成绩均值的Pandas函数
嘿,这需求很清晰,咱们可以通过合并Series为DataFrame,再借助Pandas的分组功能轻松实现目标。下面是完整的函数实现:
import pandas as pd def calculate_gender_grade_mean(grades, genders): # 将成绩和性别Series合并为DataFrame,建立对应关系 student_df = pd.DataFrame({'grades': grades, 'genders': genders}) # 按性别分组,计算每组的成绩均值,最后转换为字典格式 gender_grade_mean = student_df.groupby('genders')['grades'].mean().to_dict() return gender_grade_mean
代码解释:
- 第一步:把传入的两个
Series合并成一个DataFrame,这样每个学生的成绩和性别就一一对应起来了,方便后续分组操作; - 第二步:使用
groupby('genders')按性别对数据分组,然后针对grades列调用mean()方法,计算出每个性别的平均成绩; - 第三步:用
to_dict()方法把分组后的结果转换成你需要的字典格式,键为性别("male"/"female"),值为对应性别的成绩均值。
测试示例:
咱们用你给出的示例数据来验证一下:
# 示例数据 grades = pd.Series([5, 4, 3, 5, 2]) genders = pd.Series(["female", "male", "male", "female", "male"]) # 调用函数 result = calculate_gender_grade_mean(grades, genders) print(result)
运行后会输出:{'male': 3.0, 'female': 5.0},完全符合你的预期。
小提示:
如果你的数据中存在缺失值(比如部分学生没有成绩或性别记录),可以在分组前加上dropna()来清理无效数据,避免影响均值计算,修改后的代码如下:
def calculate_gender_grade_mean(grades, genders): student_df = pd.DataFrame({'grades': grades, 'genders': genders}) # 先清理缺失值再分组计算 gender_grade_mean = student_df.dropna().groupby('genders')['grades'].mean().to_dict() return gender_grade_mean
内容的提问来源于stack exchange,提问作者John P.
相关产品推荐
相关产品推荐

