如何对DataFrame按每2小时分组?遇AttributeError求解决
按2小时分组DataFrame的正确实现方法
你遇到的错误是因为dt属性下并没有Timedelta这个方法——pandas的DatetimeProperties(也就是datetime列调用dt后得到的对象)只提供和datetime属性相关的方法(比如取小时、日期,或者对时间做取整操作),不是用来直接创建时间间隔的。下面给你两种靠谱的实现方式:
方法1:用resample(推荐给时间序列聚合场景)
如果你需要对分组后的数值做统计(比如均值、求和),resample是专门为时间序列设计的工具,用起来很顺手:
# 先确保Time列是datetime类型(如果还没转换的话) last8['Time'] = pd.to_datetime(last8['Time']) # 按2小时分组,这里以计算均值为例,你可以换成sum()/max()等聚合函数 two_hour_groups = last8.resample('2H', on='Time').mean()
方法2:用groupby配合dt.floor
如果一定要用groupby,可以通过dt.floor('2H')把每个时间戳向下对齐到最近的2小时起始点,用这个对齐后的时间作为分组键:
last8['Time'] = pd.to_datetime(last8['Time']) # 生成2小时间隔的分组键并分组 grouped = last8.groupby(last8['Time'].dt.floor('2H')) # 遍历查看每个分组的内容(示例) for interval_start, group_data in grouped: print(f"时间段:{interval_start} 至 {interval_start + pd.Timedelta(hours=2)}") print(group_data) print("---")
补充说明
- 如果你想向上对齐时间(比如00:20的时间归到02:00的分组),可以把
floor换成ceil。 - 时间间隔的字符串格式很灵活,比如'2H'代表2小时,'30T'代表30分钟,'1D'代表1天,pandas都能识别。
内容的提问来源于stack exchange,提问作者Dheeraj
相关产品推荐
相关产品推荐

