You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame子集化后分组均值绘图无变化问题求助

问题分析与解决方法

首先,先解决你最初掩码无效的问题:你的掩码逻辑存在错误!

mask = ~((ES.index.hour > 16) & (ES.index.hour < 17))

因为hour是整数类型,ES.index.hour >16匹配的是17点及以后的时间,ES.index.hour <17匹配的是16点及以前的时间,这两个条件的交集是空集——没有任何时间点会同时满足这两个条件。所以你的掩码等价于~False,所有数据都会被保留,自然起不到过滤作用。正确的掩码应该直接匹配16点整的小时:

mask = ~(ES.index.hour == 16)
ES = ES[mask]

不过你后来用drop+between_time的方法是正确的,这个方法能准确选中所有日期的16:00-17:00时段数据。

接下来是核心问题:为什么移除数据后绘图完全没变化?

最可能的原因是:你的原始数据中根本不存在16:00至17:00的观测值!
从你给出的ES.head()来看,所有数据都是从19:15开始的,大概率你的整个数据集的时间范围都不包含16-17点的记录。这种情况下,无论是掩码过滤还是drop删除,都没有实际移除任何数据——因为本来就没有这些时段的数据,所以分组计算的均值和原图完全一致。

验证方法

你可以先检查数据中是否真的存在16:00-17:00的点:

# 统计该时段的记录数
print("16:00-17:00的记录数:", ES.between_time('16:00','17:00').shape[0])

如果输出是0,就说明确实没有这些数据,移除操作当然不会有效果。

额外优化建议

如果你确认数据中存在该时段数据且成功移除后,想要更清晰地看到绘图变化,可以把分组后的索引转换为易读的时间格式,避免MultiIndex带来的x轴显示问题:

fig = plt.figure()
ax1 = fig.add_subplot(111)
# 分组并计算均值
grouped_returns = ES.groupby([ES.index.hour, ES.index.minute]).mean()
# 将MultiIndex转换为HH:MM格式的字符串
grouped_returns.index = grouped_returns.index.map(lambda x: f"{x[0]:02d}:{x[1]:02d}")
# 绘图
plt.plot(grouped_returns)
ax1.set_ylabel('Return')
ax1.set_xlabel('5-minute interval')
# 旋转x轴标签避免重叠
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者Rainymood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:22:46