深耕专业教研,探索前沿技术
信息技术来源:2026年4月杭州二模技术试卷

第 14 题

答案与解析

第(1)小题

参考答案
  1. maxv = ave

  2. t[5:7]

数据处理过程

df = pd.read_excel("data.xlsx") #读取文件

读取后得到 DataFrame df。图 a 中每行记录一天的数据,第一列“时间”保存日期,其余各列分别保存各房间当天的照明用电量。因此,某房间列全年数据的总和除以 12,才是该房间的月均用电量;直接对每天的数据求平均得到的是日均用电量。

columns = df.columns[1:]        #取得所有房间列表

df.columns[1:] 跳过第一列“时间”,取得各房间的列名,作为后续循环逐个处理的对象。

maxv = 0
for col in columns:
    s = df[col].sum()           #求总和
    ave = round(s/12, 2)        #保留 2 位小数
    if ave > maxv:
        ①
        maxcol = col

循环每次选取一个房间列,对其全年用电量求和,再除以 12 并保留两位小数,得到 ave。ave > maxv 比较当前值与此前记录的最大值;进入分支后,已知语句把当前房间名保存到 maxcol。maxv 与 maxcol 需要共同记录当前找到的最大月均值及其对应房间。

df.insert(0,"月","")           #在首列插入"月"列

在 df 最左侧新增“月”列,并先将各行该列的值设为空字符串,供后续逐行填写月份。

for i in df.index:
    t = df.at[i,"时间"]         #通过行标签和列标签选取单个值
    df.at[i,"月"] = ②

i 依次取 df 的行标签,df.at[i,"时间"] 读取该行日期字符串 t。下一条赋值需要把该日期对应的月份写入同一行的“月”列,为后续按月汇总建立分组依据。

df = df.drop("时间",axis=1)     #删除"时间"列

axis=1 表示删除列;月份已经单独保存后,删除“时间”列,保留“月”及各房间用电量列。

df2 = df[["月",maxcol]]         #从 df 中筛选出两列数据

双层方括号按列名列表选取“月”和目标房间两列,得到 DataFrame df2。它仍是一行一天,尚未汇总成月用电量。以图 c 显示的目标房间 2-201 为例,图 a 开头两行在 df2 中的结构如下。

index 月 2-201
0 01 5.19
1 01 5.52
… … …

填空分析

①

条件 ave > maxv 表示当前房间的月均用电量超过了此前记录的最大值。下一行 maxcol = col 保存当前房间名,划线处还必须同步更新最大值,才能让后续房间与新的最大值比较,因此填 maxv = ave。

②

时间字符串采用 YYYY-MM-DD 格式,例如 2025-01-01。Python 字符串下标从 0 开始,月份的两个字符位于下标 5、6;切片左闭右开,应写为 t[5:7],得到 01。保留两位月份字符串,也便于后续按月份顺序分组和显示。

第(2)小题

参考答案
  1. B

  2. F

  3. C

共用程序分析见第(1)小题。

填空分析

①

df2 每行仍是一天的数据,题目需要的是每个月的总用电量,因此按“月”分组,对所选房间的用电量求和:

df3 = df2.groupby("月",as_index = False).sum()

选择 B。as_index=False 使月份保留为“月”列,结果使用默认整数行索引;每一行由一天变为一个月。默认按分组键排序,补零后的月份字符串会按 01~12 排列。A 求的是组内平均值,且把月份放入行索引,不符合月总量及后续按“月”列访问的要求。

依据图 c 的月用电量,分组结果 df3 的部分数据如下,列名为“月”和“2-201”,index 为默认整数索引:

index 月 2-201
0 01 196.25
1 02 130.36
2 03 210.60
3 04 210.24
… … …
11 12 156.67

②

图 b 横轴为月份,纵轴为所选房间各月用电量。df3 的月份保存在“月”列,房间列名保存在 maxcol,所以填入:

plt.plot(df3.月,df3[maxcol])

选择 F。E 使用 df3.index,取得的是 0~11 的行索引,并不是图中的月份 01~12。

③

折线图按月份顺序绘制完成后,文字输出要求按月用电量降序排列,应以 maxcol 指定的房间列为排序依据,并设置 ascending=False:

df3 = df3.sort_values(maxcol,ascending=False)

选择 C。col 是前面遍历房间时使用的循环变量,循环结束后保留的是最后遍历的房间名,不一定是 maxcol,因此不能选 D。排序改变行的显示顺序,但保留原行标签;最后的循环遍历 df3.index,按标签读取对应月份和用电量,仍能正确配对输出。

降序排序后,df3 的前几行如下。index 保留分组结果中的原标签,不会自动重新编号:

index 月 2-201
2 03 210.60
3 04 210.24
4 05 203.85
5 06 200.11
0 01 196.25
7 08 186.07
… … …

第(3)小题

参考答案

6

图 c 已按月用电量降序排列。前 6 行分别为 03、04、05、06、01、08 月,对应 210.60、210.24、203.85、200.11、196.25、186.07 kW·h,均大于 180.67 kW·h。第 7 行的 07 月为 179.95 kW·h,已低于月均值,之后各行更低,因此共有 6 个月超过月均用电量。