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

如何在不改动其他列的前提下重采样DataFrame的Time_Instant列?

解决Pandas重采样时"The grouper name Time_Instant is not found"报错问题

问题背景

你想要对DataFrame的Measurement列按3小时间隔重采样,同时保留Sensor_ID列不变。你的原始输入数据是:

Sensor_ID  Time_Instant          Measurement
0          14121        2013/11/14 17:00  0.8
1          14121        2013/11/14 18:00  0.6
2          14121        2013/11/14 19:00  0.4
3          14121        2013/11/14 20:00  0.4
4          14121        2013/11/14 21:00  0

期望得到的重采样结果是:

Sensor_ID  Time_Instant          Measurement
0          14121        2013/11/14 00:00:00  0.8
1          14121        2013/11/14 03:00:00  0.6
2          14121        2013/11/14 06:00:00  0.4
3          14121        2013/11/14 09:00:00  0.4
4          14121        2013/11/14 12:00:00  0

但运行你写的代码时,出现了报错:'The grouper name Time_Instant is not found'。

报错原因分析

你犯了一个关键的小错误:你把DataFrame的列名转换成了datetime类型,而不是把Time_Instant这一列的内容转换成datetime类型。

这段代码Mi_Meteo.columns = pd.to_datetime(Mi_Meteo.columns ,errors='coerce' )会把你的列名(比如Time_Instant)尝试转成datetime,结果Time_Instant这个列名被转成了无效的datetime值(或者直接丢失了原列名),导致后续resample找不到名为Time_Instant的分组列。

解决步骤与完整代码

要实现你的需求,只需要修正类型转换的对象,再指定正确的聚合逻辑即可:

import pandas as pd

# 构造你的原始数据(如果已有DataFrame可以跳过这一步)
data = {
    'Sensor_ID': [14121]*5,
    'Time_Instant': ['2013/11/14 17:00', '2013/11/14 18:00', '2013/11/14 19:00', '2013/11/14 20:00', '2013/11/14 21:00'],
    'Measurement': [0.8, 0.6, 0.4, 0.4, 0]
}
Mi_Meteo = pd.DataFrame(data)

# 正确操作:把Time_Instant列的内容转换成datetime类型
Mi_Meteo['Time_Instant'] = pd.to_datetime(Mi_Meteo['Time_Instant'], errors='coerce')

# 重采样:按3小时间隔,从当天0点开始划分区间,指定各列的聚合方式
resampled_df = Mi_Meteo.resample(
    '3H', 
    on='Time_Instant', 
    origin='start_day'  # 确保重采样从当天0点开始
).agg({
    'Sensor_ID': 'first',  # 因为所有Sensor_ID都是同一个值,用first保留原始值
    'Measurement': 'sum'   # 对Measurement列求和
}).reset_index()  # 把Time_Instant从索引变回普通列

print(resampled_df)

代码说明

  1. 类型转换修正:Mi_Meteo['Time_Instant'] = pd.to_datetime(...)会把该列的字符串时间转成datetime类型,这是resample能正常工作的前提。
  2. 重采样起始点:origin='start_day'参数让重采样从当天的0点开始划分时间区间,这样你的17-21点数据会被对应到0点、3点等区间(和你的期望输出格式一致)。
  3. 多列聚合:agg()方法可以为不同列指定不同的聚合逻辑,避免Sensor_ID被错误求和,保证它保留原始值。
  4. 重置索引:reset_index()把重采样后作为索引的Time_Instant变回普通列,让输出格式和你期望的一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:35:32