如何计算DataFrame中每日00:00:00与23:59:59的数据差值
计算每日00:00:00与23:59:59时刻的数据差值
需求说明
针对连续7天的时间序列数据,计算每日00:00:00和23:59:59两个时刻对应Data列的差值,最终按日期输出结果。
示例数据
Date Data 2018-12-01 00:00:00 2 2018-12-01 12:00:00 5 2018-12-01 23:59:59 10 2018-12-02 00:00:00 12 2018-12-02 12:00:00 15 2018-12-02 23:59:59 22
预期输出
Date Data 2018-12-01 8 2018-12-02 10
解决方案(Pandas实现)
以下是直接可运行的代码步骤,适配你的需求:
导入库并格式化时间列
先确保Date列被识别为datetime类型:import pandas as pd # 构造示例数据(实际场景可替换为pd.read_csv等读取方式) data = { 'Date': ['2018-12-01 00:00:00', '2018-12-01 12:00:00', '2018-12-01 23:59:59', '2018-12-02 00:00:00', '2018-12-02 12:00:00', '2018-12-02 23:59:59'], 'Data': [2, 5, 10, 12, 15, 22] } df = pd.DataFrame(data) df['Date'] = pd.to_datetime(df['Date'])筛选目标时刻的记录
提取仅包含00:00:00和23:59:59的行:target_times = ['00:00:00', '23:59:59'] filtered_df = df[df['Date'].dt.time.astype(str).isin(target_times)]按日期分组计算差值
按日期分组后,用当日23:59:59的数据减去00:00:00的数据:# 提取纯日期作为分组依据 filtered_df['date_only'] = filtered_df['Date'].dt.date # 分组计算差值,默认每组按时间升序排列,取第二个值减第一个值 result = filtered_df.groupby('date_only')['Data'].apply(lambda x: x.iloc[1] - x.iloc[0]).reset_index() # 调整列名和格式,匹配预期输出 result.columns = ['Date', 'Data'] result['Date'] = pd.to_datetime(result['Date']).dt.strftime('%Y-%m-%d')查看最终结果
运行后result即为预期格式:print(result)
补充说明
- 若数据中存在某一天缺少目标时刻的情况,可添加判断逻辑(比如检查每组长度是否为2),跳过或标记异常日期。
- 针对连续7天的需求,只需输入包含这7天目标时刻的DataFrame,代码会自动按日期完成计算。
内容的提问来源于stack exchange,提问作者check_my_code
相关产品推荐
相关产品推荐

