如何遍历无零秒起始的分钟时段?Pandas数据处理求助
解决方案
你的代码核心问题是用dt.second == 0硬筛选分钟起始点,导致没有0秒记录的分钟直接被遗漏。要覆盖所有有数据的分钟,应该按小时+分钟维度分组,先提取每个分钟的第一个值(不管该分钟从哪一秒开始),再关联该分钟内每一秒的最后一个值来计算差值。
修正后的代码如下:
import pandas as pd def Cumulative_delta(): # 读取CSV并解析时间列 df = pd.read_csv(Ex_Csv, usecols=['time', 'value'], parse_dates=['time']) df['value'] = df['value'].astype(int) # 生成分钟级分组标识(格式:HH:MM) df['hour_min'] = df['time'].dt.strftime('%H:%M') # 提取每个分钟的第一个值和对应时间 minute_first = df.groupby('hour_min').agg( first_value=('value', 'first'), first_time=('time', 'first') ).reset_index() # 按秒分组,提取每一秒的最后一个值 second_last = df.groupby(df['time'].dt.floor('S')).agg( last_value=('value', 'last') ).reset_index() # 给秒级数据加上分钟标识,用于关联 second_last['hour_min'] = second_last['time'].dt.strftime('%H:%M') # 关联数据并计算差值 result = pd.merge(second_last, minute_first, on='hour_min') result['delta'] = result['first_value'] - result['last_value'] # 整理时间范围格式 result['time_range'] = result.apply(lambda x: f"{x['first_time'].strftime('%H:%M:%S')}-{x['time'].strftime('%H:%M:%S')}", axis=1) # 整理输出列并保存 output = result[['delta', 'time_range']].rename(columns={'delta': 'value', 'time_range': 'time'}) output.to_excel('Datasets\\Data\\Cumulative_delta.xlsx', index=False) output.to_csv('Datasets\\CSV\\Cumulative_delta.csv', index=False) print('处理完成')
关键修正点说明
- 用
hour_min作为分组键:不管分钟内有没有0秒记录,只要该分钟有数据,就会被纳入分组,彻底解决遗漏问题。 - 提取分钟第一个值:通过
groupby('hour_min').agg('first')直接取每个分钟组的第一条记录,无需依赖0秒标记。 - 秒级数据处理:用
dt.floor('S')将时间精确到秒,确保每一秒的最后一条记录被正确提取。 - 关联计算:通过
hour_min将分钟起始值与该分钟内的所有秒级数据关联,计算每个秒的最后值与分钟第一个值的差值。
内容的提问来源于stack exchange,提问作者Show_man
相关产品推荐
相关产品推荐

