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

如何实现基于时间区间求和的复杂Pandas DataFrame合并?

基于节目时间区间统计对应半小时观众总数

我们需要将df1中的节目信息,与df2中对应节目、且半小时区间处于节目官方起止时间内的观众数据求和合并,最终得到目标result_df的效果。

原始数据

import pandas as pd

df1 = pd.DataFrame({'Show':['NBA Basketball','NHL Hockey'],'Start_Time':['19:00','15:00'],'End_Time':['20:00','15:30']})

df2 = pd.DataFrame({'Show':['NBA Basketball','NBA Basketball','NBA Basketball','NBA Basketball','NBA_Basketball','NHL Hockey','NHL Hockey','NHL Hockey'],'Half_Hour_Interval_Start':['19:00','19:30','20:00','20:30','21:00','15:00','15:30','16:00'],'Viewers':[1000,2000,1500,1000,3000,2000,4000,5000]})

解决方案步骤

1. 转换时间格式为可比较数值

将时间字符串转为分钟数(小时×60+分钟),简化区间判断逻辑:

def time_to_minutes(time_str):
    hours, minutes = map(int, time_str.split(':'))
    return hours * 60 + minutes

# 给df1添加转换后的时间列
df1['Start_Min'] = df1['Start_Time'].apply(time_to_minutes)
df1['End_Min'] = df1['End_Time'].apply(time_to_minutes)

# 给df2添加转换后的区间开始时间列
df2['Interval_Start_Min'] = df2['Half_Hour_Interval_Start'].apply(time_to_minutes)

2. 合并并筛选符合条件的记录

按节目名称合并两个DataFrame,筛选出半小时区间开始时间在节目起止范围内的记录(注意:区间开始时间需小于节目结束时间,因为结束时间点不属于播出时段):

# 合并df1和df2
merged = pd.merge(df1, df2, on='Show', how='left')

# 筛选时间符合条件的记录
filtered = merged[(merged['Interval_Start_Min'] >= merged['Start_Min']) & 
                  (merged['Interval_Start_Min'] < merged['End_Min'])]

3. 分组求和并整理结果

按节目分组求和观众数,再合并回原df1并整理成目标格式:

# 按节目分组求和观众数
viewers_sum = filtered.groupby('Show')['Viewers'].sum().reset_index()

# 合并回df1并保留目标列
result_df = pd.merge(df1, viewers_sum, on='Show', how='left')
result_df = result_df[['Show', 'Start_Time', 'End_Time', 'Viewers']]

验证结果

此时result_df的输出与目标完全一致:

print(result_df)
# 输出:
#             Show Start_Time End_Time  Viewers
# 0  NBA Basketball      19:00    20:00     3000
# 1      NHL Hockey      15:00    15:30     2000

补充说明

  • df2中的NBA_Basketball(下划线命名)与df1的NBA Basketball(空格命名)名称不匹配,因此不会被统计,符合目标结果要求。
  • 用分钟数转换时间的方式,避免了datetime类型的时区等额外问题,更适合单纯的时段比较场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:04:52