如何基于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)
代码说明
- 从
df中提取并排序时间点,按步长2分组生成目标时间区间; - 遍历每个区间,筛选
df1中时间落在区间内的行,对Distance列求和; - 将求和结果保留两位小数,匹配预期输出格式。
内容的提问来源于stack exchange,提问作者appu
相关产品推荐
相关产品推荐

