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

如何基于DataFrame df的日期范围对df1的Distance列求和(Pandas)

解决方法:按指定时间区间汇总DataFrame数据

问题说明

我有两个Pandas DataFrame:df 和 df1,需要依据df中的date_time划分的时间区间,对df1落在对应区间内的Distance列数值求和。

示例数据

from io import StringIO
import pandas as pd

data = """IGN,External,Voltage,date_time
0,ON,53.06,13-11-2023 10:01:14
743,ON,47.80,13-11-2023 15:42:11
745,ON,51.20,13-11-2023 16:22:41
1152,ON,50.44,13-11-2023 19:18:26
1155,ON,52.88,14-11-2023 09:39:54
2191,ON,53.66,14-11-2023 14:45:53
"""
df = pd.read_csv(StringIO(data), parse_dates=['date_time'], dayfirst=True)

data1 = """IGN,External,Distance,date_time
0,ON,1,13-11-2023 10:01:14
300,ON,5,13-11-2023 10:42:11
400,ON,6,13-11-2023 11:42:11
743,ON,9,13-11-2023 15:42:11
745,ON,10,13-11-2023 16:22:41
1000,ON,12,13-11-2023 17:13:43
1152,ON,89,13-11-2023 19:18:26
1155,ON,52.88,14-11-2023 09:39:54
1189,ON,54.33,14-11-2023 10:39:54
2191,ON,34,14-11-2023 14:45:53
"""
df1 = pd.read_csv(StringIO(data1), parse_dates=['date_time'], dayfirst=True)

预期输出

start_date            end_date  Distance
0 2023-11-13 10:01:14 2023-11-13 15:42:11     21.00
1 2023-11-13 16:22:41 2023-11-13 19:18:26    111.00
2 2023-11-14 09:39:54 2023-11-14 14:45:53    141.21

实现代码

# 从df提取排序后的时间点,按每两个连续时间点组成区间
time_points = df['date_time'].sort_values().tolist()
intervals = list(zip(time_points[::2], time_points[1::2]))

# 初始化结果DataFrame
result = pd.DataFrame(intervals, columns=['start_date', 'end_date'])

# 计算每个区间内df1的Distance总和
result['Distance'] = result.apply(
    lambda row: df1[(df1['date_time'] >= row['start_date']) & 
                   (df1['date_time'] <= row['end_date'])]['Distance'].sum(),
    axis=1
).round(2)

print(result)

代码说明

  1. 从df中提取并排序时间点,按步长2分组生成目标时间区间;
  2. 遍历每个区间,筛选df1中时间落在区间内的行,对Distance列求和;
  3. 将求和结果保留两位小数,匹配预期输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:16:17