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

Pandas如何按来源和日期分组计算新闻发布平均时间间隔

Pandas按来源+日期分组计算相邻新闻平均发布间隔

需求说明

现有简化版新闻发布数据的pandas DataFrame,需要计算每个独立来源、每个自然日发布的相邻两条新闻之间的平均时间间隔。

输入数据

source          date           time     
Investing.com   2017-05-11     08:00:00     
Investing.com   2017-05-11     12:00:00
Investing.com   2017-05-11     16:00:00 
yahoo.com       2017-05-11     09:00:00 
yahoo.com       2017-05-11     12:00:00
yahoo.com       2017-05-11     15:00:00
yahoo.com       2017-05-12     06:00:00 
yahoo.com       2017-05-12     12:00:00
yahoo.com       2017-05-12     18:00:00  

期望输出

source          date           Average_Daily_time   
Investing.com   2017-05-11     04:00:00      
yahoo.com       2017-05-11     03:00:00
yahoo.com       2017-05-12     06:00:00 

已尝试方案

已将date和time字段合并为datetime时间戳字段,编写代码如下:

df.sort_values('datetime').groupby('source')['datetime'].apply(lambda x: x.diff().dt.seconds.mean()/60)

问题说明

上述代码仅按source字段分组,会合并同一来源所有日期的数据计算全量平均时间间隔,跨天的时间差也会被纳入统计,无法按单独日期拆分统计对应平均间隔。


实现代码

核心调整点:将分组维度从单一source改为source + date双维度,确保每个分组对应单个来源单日的所有新闻数据,组内排序后计算相邻时间差的平均值即可。

import pandas as pd

# 确保datetime字段为标准时间类型,按分组维度+时间排序
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.sort_values(by=['source', 'date', 'datetime'])

# 双维度分组计算平均时间间隔
result = (
    df.groupby(['source', 'date'], as_index=False)['datetime']
    .apply(lambda group: group.diff().mean())
    .rename(columns={'datetime': 'Average_Daily_time'})
)

# 可选:将时间差格式化为 时:分:秒 的字符串格式,和示例输出样式对齐
result['Average_Daily_time'] = result['Average_Daily_time'].apply(
    lambda td: f"{td.components.hours:02d}:{td.components.minutes:02d}:{td.components.seconds:02d}"
)

逻辑说明

  • 分组键加入date字段后,不会再出现跨天计算时间差的问题,每个分组的统计范围严格限定为单来源单日
  • 直接对Timedelta类型的时间差取平均值,比手动换算秒数/分钟数的鲁棒性更强,不会出现精度损失
  • 上述代码运行后输出结果和示例期望完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:48:28