3.3.4 案例练习

案例1:学生成绩分析

场景:某班级的学生成绩数据如下,请完成以下任务:

  1. 计算每位学生的总分和平均分。
  2. 找出数学成绩高于90分或英语成绩高于85分的学生。
  3. 按总分从高到低排序,并输出前3名学生。
import pandas as pd

data = {
    '姓名': ['张三', '李四', '王五', '赵六', '钱七'],
    '数学': [85, 92, 78, 88, 95],
    '英语': [90, 88, 85, 92, 80],
    '物理': [75, 80, 88, 85, 90]
}
df = pd.DataFrame(data)

# 1. 计算总分和平均分
df['总分'] = df[['数学', '英语', '物理']].sum(axis=1)
df['平均分'] = df['总分'] / 3

# 2. 找出数学>90或英语>85的学生
high_scores = df[(df['数学'] > 90) | (df['英语'] > 85)]

# 3. 按总分排序并输出前3名
top3 = df.sort_values('总分', ascending=False).head(3)

print("总分和平均分:\n", df)
print("\n数学>90或英语>85的学生:\n", high_scores)
print("\n总分前3名学生:\n", top3)

案例2:销售数据分析

场景:某公司销售数据如下,请完成以下任务:

  1. 计算每种产品的总销售额(销售额 = 单价 × 销量)。
  2. 找出销售额最高的产品。
  3. 按销售额从高到低排序,并输出所有产品信息。
import pandas as pd

data = {
    '产品名称': ['A', 'B', 'C', 'D'],
    '单价': [100, 150, 200, 120],
    '销量': [50, 30, 20, 40]
}
df = pd.DataFrame(data)

# 1. 计算总销售额
df['销售额'] = df['单价'] * df['销量']

# 2. 找出销售额最高的产品
max_sales = df[df['销售额'] == df['销售额'].max()]

# 3. 按销售额排序
sorted_df = df.sort_values('销售额', ascending=False)

print("销售额计算:\n", df)
print("\n销售额最高的产品:\n", max_sales)
print("\n按销售额排序:\n", sorted_df)

案例3:员工考勤统计

场景:某部门员工考勤数据如下,请完成以下任务:

  1. 计算每位员工的出勤率(出勤率 = 出勤天数 / 工作日总数)。
  2. 标记出勤率低于80%的员工。
  3. 按出勤率从高到低排序。
import pandas as pd

data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '出勤天数': [20, 15, 18, 22],
    '工作日总数': [25, 20, 25, 25]
}
df = pd.DataFrame(data)

# 1. 计算出勤率
df['出勤率'] = (df['出勤天数'] / df['工作日总数']).round(2)

# 2. 标记出勤率<80%的员工
df['需关注'] = df['出勤率'] < 0.8

# 3. 按出勤率排序
sorted_df = df.sort_values('出勤率', ascending=False)

print("出勤率统计:\n", df)
print("\n出勤率排序:\n", sorted_df)

案例4:电影评分分析

场景:某电影评分数据如下,请完成以下任务:

  1. 计算每部电影的平均评分。
  2. 找出评分高于8.5的电影。
  3. 按平均评分从高到低排序。
import pandas as pd

data = {
    '电影名称': ['电影A', '电影B', '电影C', '电影D'],
    '评分1': [9.0, 8.5, 8.0, 7.5],
    '评分2': [8.5, 9.0, 8.5, 8.0],
    '评分3': [9.5, 8.0, 7.5, 7.0]
}
df = pd.DataFrame(data)

# 1. 计算平均评分
df['平均评分'] = df[['评分1', '评分2', '评分3']].mean(axis=1).round(2)

# 2. 找出评分>8.5的电影
high_rated = df[df['平均评分'] > 8.5]

# 3. 按平均评分排序
sorted_df = df.sort_values('平均评分', ascending=False)

print("平均评分:\n", df)
print("\n评分>8.5的电影:\n", high_rated)
print("\n按评分排序:\n", sorted_df)

案例5:股票价格分析

场景:某股票价格数据如下,请完成以下任务:

  1. 计算每日股价的涨跌幅(涨跌幅 = (当日收盘价 – 前一日收盘价) / 前一日收盘价)。
  2. 找出涨幅超过5%的日期。
  3. 按日期排序,并输出涨跌幅最高的日期。
import pandas as pd

data = {
    '日期': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
    '收盘价': [100, 105, 110, 102]
}
df = pd.DataFrame(data)
df['日期'] = pd.to_datetime(df['日期'])

# 1. 计算涨跌幅
df['涨跌幅'] = df['收盘价'].pct_change().round(4)

# 2. 找出涨幅>5%的日期
high_increase = df[df['涨跌幅'] > 0.05]

# 3. 按日期排序并输出最高涨跌幅日期
sorted_df = df.sort_values('日期')
max_increase_date = df.loc[df['涨跌幅'].idxmax(), '日期']

print("涨跌幅计算:\n", df)
print("\n涨幅>5%的日期:\n", high_increase)
print("\n涨跌幅最高的日期:\n", max_increase_date)

案例6:电商用户行为分析(基础版)

场景:某电商平台的用户行为数据如下,请完成以下任务:  

  1. 计算每位用户的**总消费金额**(消费金额 = 商品单价 × 购买数量)  
  2. 找出**消费金额最高的用户**,并输出其所有信息  
  3. 计算所有用户的**平均消费金额**(保留2位小数)  
  4. 统计**电子产品**的总购买数量  
import pandas as pd

data = {
    '用户ID': [101, 102, 103, 104, 105],
    '用户名': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    '商品类别': ['电子产品', '服饰', '电子产品', '家居', '服饰'],
    '商品单价': [1200, 300, 800, 150, 200],
    '购买数量': [1, 3, 2, 5, 4]
}
df = pd.DataFrame(data)

参考答案(不使用groupby和apply)

import pandas as pd

data = {
    '用户ID': [101, 102, 103, 104, 105],
    '用户名': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    '商品类别': ['电子产品', '服饰', '电子产品', '家居', '服饰'],
    '商品单价': [1200, 300, 800, 150, 200],
    '购买数量': [1, 3, 2, 5, 4]
}
df = pd.DataFrame(data)

# 1. 计算总消费金额
df['消费金额'] = df['商品单价'] * df['购买数量']

# 2. 找出消费金额最高的用户
max_spend_user = df[df['消费金额'] == df['消费金额'].max()]

# 3. 计算平均消费金额
avg_spend = round(df['消费金额'].mean(), 2)

# 4. 统计电子产品的总购买数量
electronic_total = df[df['商品类别'] == '电子产品']['购买数量'].sum()

print("用户消费分析:\n", df)
print("\n消费金额最高的用户:\n", max_spend_user)
print("\n平均消费金额:", avg_spend)
print("电子产品总购买数量:", electronic_total)

输出示例:

Plain Text
用户消费分析:
    用户ID     用户名  商品类别  商品单价  购买数量  消费金额
0   101    Alice  电子产品   1200       1   1200
1   102      Bob     服饰    300       3    900
2   103  Charlie  电子产品    800       2   1600
3   104    David     家居    150       5    750
4   105      Eve     服饰    200       4    800

消费金额最高的用户:
    用户ID     用户名  商品类别  商品单价  购买数量  消费金额
2   103  Charlie  电子产品    800       2   1600

平均消费金额: 1050.0
电子产品总购买数量: 3

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容