resample() B. rolling() C. merge() D. diff() 答案:B 解析: 语料明确:rolling() 方法用于对时间序列或任意连续数据进行移动窗口计算。resample() 属于 4.7.3 重采样,diff() 属于 4.7.2 时间间隔计算。rolling() 的参数 window 指定的是? A. 重采样的时间频率,如 'D'、'W' B. 滚动窗口的大小,即每次计算时包含的连续数据点个数 C. 数据框的列个数 D. 缺失值填充方式 答案:B 解析: 语料:参数 window 指定滚动窗口的大小,即每次计算时包含的连续数据点个数。频率字符串是 resample() 的参数。rolling() 只能用于带日期索引的时间序列,不能用于任意连续数据。 答案:× 解析: 语料写明:用于对时间序列或任意连续数据进行移动窗口计算。窗口按连续数据点滑动,不一定要求索引是时间。rolling() 典型用途的表述。窗口内可做求和、平均值、最大值、最小值等统计。window 指定每次计算包含的连续数据点个数 C. 用 resample('W') 按周取最大值 D. 先 rolling() 得到窗口对象,再链式调用 .max() / .min() 等 答案:ABD 解析: A、B 来自 4.7.4;D 与课程写法 df['温度'].rolling(window=3).max() 及 4.7.5「先创建滚动窗口对象再聚合」一致。C 是 4.7.3 的 resample(),不是移动窗口。import pandas as pd
dates = pd.date_range('2024-09-01', periods=7, freq='D')
df = pd.DataFrame({'温度': [30, 32, 31, 29, 28, 27, 26]}, index=dates)
df['滚动平均'] = df['温度'].rolling(window=3).max()
print(df.loc['2024-09-03', '滚动平均'])
A. NaN B. 31.0 C. 32.0 D. 30.0 答案:C 解析: 窗口为 3,9 月 3 日取最近 3 天 30、32、31 的最大值,为 32.0。列名虽为「滚动平均」,代码调用的是 .max() 而不是 .mean()。前两天才是 NaN。
30.0 与 31.0 B. NaN 与 31.0 C. NaN 与 32.0 D. 0 与 28.0 答案:B 解析: 默认窗口未满 3 个点时结果为 NaN,故 9 月 1 日(及 9 月 2 日)为空值,不是 0。9 月 5 日窗口为 31、29、28,最高温度 31.0。import pandas as pd
dates = pd.date_range('2024-09-01', periods=7, freq='D')
df = pd.DataFrame({'温度': [30, 32, 31, 29, 28, 27, 26]}, index=dates)
df['滚动平均'] = df['温度'].rolling(window=3).max()
print(df)
A. 前 2 天「滚动平均」为 NaN,因为窗口尚未凑满 3 个点 B. 9 月 4 日值为 32.0,对应窗口 32、31、29 C. 9 月 7 日值为 28.0,对应窗口 28、27、26 D. 列名叫「滚动平均」,所以实际计算的是 3 日均值 答案:ABC 解析: 课程输出与注释均为「最近 3 天的最高温度」。D 错误:注释虽写滚动平均,链式调用的是 .max()。若用 .mean(),9 月 3 日才是 31.0,与课程结果不符。
df['温度'].rolling(window=3) 而不再调用 .max() 等方法,就已经得到各窗口的统计数值。 答案:× 解析: rolling() 只创建滚动窗口对象。必须再对窗口对象做聚合(如 .max()、.min()、.mean()、.sum())才得到数值序列。课程写法是 rolling(window=3).max()。a 在 9 月 1 日的值、b 在 9 月 1 日的值、c 在 9 月 3 日的值依次是?import pandas as pd
dates = pd.date_range('2024-09-01', periods=7, freq='D')
s = pd.Series([30, 32, 31, 29, 28, 27, 26], index=dates)
a = s.rolling(window=3).max()
b = s.rolling(window=3, min_periods=1).max()
c = s.rolling(window=3).mean()
print(a.loc['2024-09-01'], b.loc['2024-09-01'], c.loc['2024-09-03'])
A. NaN、30.0、31.0 B. 30.0、30.0、32.0 C. NaN、NaN、32.0 D. 0、30.0、31.0 答案:A 解析: 默认 min_periods 等于 window,窗口未满时 a 为 NaN。min_periods=1 时只要有 1 个观测就计算,b 在 9 月 1 日为 30.0(4.7.5 KDJ 写法同理)。c 是 3 日均值:(30+32+31)/3=31.0,不要与课程示例的 .max()(32.0)搞混。
rolling() 的作用和 window 的含义;写出课程 7 天温度示例的完整可运行代码,并解释为什么前两天是 NaN、从第三天起各是多少。 答案: rolling() 对时间序列或任意连续数据做移动窗口计算,在指定窗口内进行求和、平均、最大、最小等统计,常用于平滑、趋势或噪声过滤。window 是每次计算包含的连续数据点个数。import pandas as pd
dates = pd.date_range('2024-09-01', periods=7, freq='D')
df = pd.DataFrame({'温度': [30, 32, 31, 29, 28, 27, 26]}, index=dates)
df['滚动平均'] = df['温度'].rolling(window=3).max()
print(df)
窗口为 3,前 2 天点数不足,结果为 NaN。其后为最近 3 天最高温度:9 月 3 日 32.0,9 月 4 日 32.0,9 月 5 日 31.0,9 月 6 日 29.0,9 月 7 日 28.0。注意代码用的是 .max(),不是均值。 解析: 评分要点:① 点出时间序列/任意连续数据、窗口统计、平滑/趋势/噪声;② window 是连续点数;③ 代码含 date_range、温度列与 rolling(window=3).max();④ 前两天 NaN 及后五天 32.0/32.0/31.0/29.0/28.0。把结果说成均值或漏写链式 .max() 应扣分。
r1 前两行为什么是 NaN 而不是 0?(2)9 月 4 日 r1 与 r2 各是多少、窗口里有哪些温度?(3)若把 r1 改成 .mean(),9 月 3 日应变为多少?(4)r3 用 min_periods=1 的目的是什么,9 月 1 日会得到什么?它与 4.7.5 计算 KDJ 的写法有何对应?import pandas as pd
dates = pd.date_range('2024-09-01', periods=7, freq='D')
s = pd.Series([30, 32, 31, 29, 28, 27, 26], index=dates)
r1 = s.rolling(window=3).max()
r2 = s.rolling(window=3).min()
r3 = s.rolling(window=3, min_periods=1).min()
print(r1)
print(r2)
print(r3)
答案: (1)默认至少要凑满 window 个点才出结果,不足则为缺失值 NaN,不是把空窗口当成 0。 (2)9 月 4 日窗口是 32、31、29:r1 为 max=32.0,r2 为 min=29.0。 (3)改为均值后,9 月 3 日窗口 30、32、31,(30+32+31)/3=31.0。课程列名「滚动平均」容易误导,原示例实际是最大值 32.0。 (4)min_periods=1 表示至少 1 个有效观测即可计算,窗口未满也能出数。9 月 1 日 r3 为 30.0。4.7.5 中 stockData['最低'].rolling(window=n, min_periods=1).min()(以及最高价的 .max())就是这种写法,用来取最近 n 天最低价/最高价且避免前若干日全空。 解析: 评分要点:① NaN 来自窗口未满,不是 0;② 9 月 4 日窗口元素与 max/min 正确;③ 均值 31.0,并能指出课程示例用的是 max;④ min_periods=1 的含义、首日 30.0,以及与 KDJ 最近 n 日高低价的对应。只背数字不讲窗口内容可酌情扣分。
文件已写入:
知识库/第4章 pandas数据分析库/4.7.4-移动窗口计算.md问答库/第4章 pandas数据分析库/4.7.4-移动窗口计算.md