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

Pandas如何计算DataFrame各分组内的日期间隔均值

Pandas 分组计算相邻日期差值均值实现方案

问题场景

现有如下结构的数据集,包含分类列class、日期列date:

class    date
  A   2018-01-01
  B   2018-03-05
  A   2018-01-03
  A   2018-01-05
  B   2018-03-10
  A   2018-01-07

需要按class分组,计算每组内按时间排序后相邻日期的间隔天数均值,预期输出结果如下:

class  mean
  A     2
  B     5

原代码失效原因

你之前运行的代码存在两个核心问题:

  • 没有对每个分类下的日期做升序排序,diff()默认按原始数据行顺序计算差值,一旦同分类下日期行顺序打乱,结果完全错误
  • 没有对计算出的日期差做二次分组聚合,直接调用mean()会返回全量数据的全局均值;同时手动将首条记录的空差值填充为0秒,会把无效0值纳入统计,拉低均值结果

正确实现代码

首先确保date列已转换为Pandas的datetime类型,再执行计算:

import pandas as pd

# 构造示例数据集
df = pd.DataFrame({
    'class': ['A', 'B', 'A', 'A', 'B', 'A'],
    'date': ['2018-01-01', '2018-03-05', '2018-01-03', '2018-01-05', '2018-03-10', '2018-01-07']
})
# 转换日期列为datetime格式
df['date'] = pd.to_datetime(df['date'])

# 核心计算逻辑(简洁写法)
result = (
    df.groupby('class')['date']
    # 分组内先对日期排序,再计算相邻差值,求差值的天数均值(自动忽略首条记录的空值)
    .apply(lambda x: x.sort_values().diff().dt.days.mean())
    .reset_index(name='mean')
)

print(result)

运行输出

class  mean
0     A   2.0
1     B   5.0

如果需要均值为整数类型,追加.astype({'mean': int})转换即可。

注意:不需要手动填充diff()产生的NaT空值,Pandas的mean()方法默认会自动跳过空值计算,不会将无前置日期的首条记录纳入统计,结果更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:24:29