rolling() B. resample() C. groupby() D. diff() 答案:B 解析: 语料明确:resample 用于对时间序列数据进行重采样。rolling() 是 4.7.4 移动窗口,diff() 属于 4.7.2 时间间隔,groupby() 属于 4.3 分组。'W' 表示按什么频率重采样? A. 天 B. 周 C. 月 D. 年 答案:B 解析: 语料:常用频率如 'D'(天)、'W'(周)、'M'(月)等。课程示例正是 df.resample('W').max() 按周取最大值。resample(),下列说法正确的有: A. 可根据指定时间频率对数据进行聚合、填充、插值等操作 B. '3D' 表示每 3 天采样一次 C. 'D'、'W'、'M' 分别表示天、周、月 D. 升采样就是把每日数据聚合成每周数据 答案:ABC 解析: A、B、C 均来自 4.7.3。每日到每周是降采样,不是升采样,故 D 错误。weekly_max_temp 中 2024-01-07 对应的温度是?import pandas as pd
dates = pd.date_range('2024-01-01', periods=14, freq='D')
df = pd.DataFrame({'温度': [30, 32, 31, 29, 28, 27, 26, 25, 24, 23, 31, 29, 28, 27]}, index=dates)
weekly_max_temp = df.resample('W').max()
print(weekly_max_temp)
A. 30(该周第一天的温度) B. 26(1 月 7 日当天的温度) C. 32(该周最高温度) D. 31(全部 14 天的最高温度) 答案:C 解析: 第一周为 1 月 1 日至 7 日,温度 30、32、31、29、28、27、26,最大值为 32。语料注释:每 7 天统计一次最高温度。B 把周标签当成“当天取值”,是常见错误。
df.resample('W').max() 结果的行标签是? A. 2024-01-01 与 2024-01-08(每周第一天) B. 2024-01-07 与 2024-01-14 C. 仍是原来的 14 个日期 D. 0 与 1(整数索引) 答案:B 解析: 课程输出为两行:2024-01-07 对应 32,2024-01-14 对应 31。行标签是该周结束日期,不是第一天,也不会保留全部日频索引。import pandas as pd
dates = pd.date_range('2024-01-01', periods=14, freq='D')
df = pd.DataFrame({'温度': [30, 32, 31, 29, 28, 27, 26, 25, 24, 23, 31, 29, 28, 27]}, index=dates)
print(df.loc['2024-01-07', '温度'])
print(df.resample('W').max())
A. 原始数据 1 月 7 日的温度是 26 B. 按周重采样后 1 月 7 日标签对应 32 C. 第二周最高温度是 31,行标签为 2024-01-14 D. 重采样后数据框仍有 14 行 答案:ABC 解析: 14 天被聚合成 2 个周箱,行数变为 2,故 D 错。A、B 说明“周标签上的值是该周聚合结果,不是当天原值”。
df.resample('W') 后,不接 .max() 等聚合,就已经得到按周统计的数据框。 答案:× 解析: resample() 返回重采样器,还没有完成聚合。课程写法是 df.resample('W').max(),必须再接 .max()、.mean()、.sum() 等才能得到数据框。import pandas as pd
dates = pd.date_range('2024-01-01', periods=14, freq='D')
df = pd.DataFrame({'温度': [30, 32, 31, 29, 28, 27, 26, 25, 24, 23, 31, 29, 28, 27]}, index=dates)
w = df.resample('W').max()
print(int(w.loc['2024-01-07', '温度']))
print(int(df.loc['2024-01-07', '温度']))
print(int(w.loc['2024-01-14', '温度']))
A. 32,32,31 B. 32,26,31 C. 26,26,27 D. 32,26,32 答案:B 解析: w 中 2024-01-07 是第一周最大值 32;原始 df 中该日是 26。第二周 25、24、23、31、29、28、27 的最大值是 31,不是 32。A 把周聚合值误当成当天原值。
【简答题·中】请写出完整可运行代码:按课程示例创建 14 天温度数据框,按周重采样取最大值并打印。说明:结果有几行?两个行标签及对应温度各是多少?这是降采样还是升采样?
答案:
import pandas as pd
dates = pd.date_range('2024-01-01', periods=14, freq='D')
df = pd.DataFrame({'温度': [30, 32, 31, 29, 28, 27, 26, 25, 24, 23, 31, 29, 28, 27]}, index=dates)
weekly_max_temp = df.resample('W').max()
print(weekly_max_temp)
结果 2 行:2024-01-07 对应 32,2024-01-14 对应 31。日频降到周频,属于降采样。 解析: 评分要点:① date_range 的 periods=14、freq='D' 与温度列表正确;② 写出 resample('W').max();③ 能说出两行标签与 32、31;④ 能判断为降采样。漏写聚合或把 1 月 7 日说成 26 应扣分。
w.loc['2024-01-07'] 是 32,而 df.loc['2024-01-07'] 是 26?(2)若要把每月数据扩展成每日数据,这是升采样还是降采样?通常还要做什么?(3)若数据框用默认整数索引,直接 resample('W') 会怎样?它和 rolling(window=7) 有何不同?import pandas as pd
dates = pd.date_range('2024-01-01', periods=14, freq='D')
df = pd.DataFrame({'温度': [30, 32, 31, 29, 28, 27, 26, 25, 24, 23, 31, 29, 28, 27]}, index=dates)
w = df.resample('W').max()
print(w.loc['2024-01-07', '温度'])
print(df.loc['2024-01-07', '温度'])
答案: (1)resample('W').max() 按周分箱后取最大值,2024-01-07 是该周结束日标签,对应 1 月 1 日至 7 日的最高温度 32;df 中该标签仍是当天观测 26。 (2)每月扩展为每日是升采样,通常需要插值(或填充)。 (3)resample() 要求行标签为日期时间索引,整数索引会报错,须先 date_range 或 to_datetime 加 set_index。resample() 按日历频率重新分箱;rolling(window=7) 按连续 7 个数据点滑动,不按周边界对齐。 解析: 评分要点:① 能区分“周聚合标签”与“当天原值”;② 能判断升采样并提到插值;③ 能说明必须用日期时间索引,并能对比 rolling()。把 32 说成当天温度,或把升采样说成降采样,不得满分。
文件已写入:
知识库/第4章 pandas数据分析库/4.7.3-时间序列数据重采样.md问答库/第4章 pandas数据分析库/4.7.3-时间序列数据重采样.md