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

如何在Spark/SQL中对datetime列按10分钟间隔聚合均值

Pandas按10分钟时间间隔聚合计算C列均值

需求说明

现有包含A、B(字符串格式时间)、C列的DataFrame,需基于B列按每10分钟为时间间隔,聚合计算C列的均值。

输入数据

import pandas as pd
import numpy as np

df1 = pd.DataFrame(
    {"A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo",
          "foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
     "B": ["2013-01-01 01:01:00", "2013-01-01 01:03:00", "2013-01-01 01:06:00", 
           "2013-01-01 01:07:00", "2013-01-01 01:10:00", "2013-01-01 01:13:00", 
           "2013-01-01 01:16:00", "2013-01-01 01:19:00", 
           "2013-01-02 02:01:00", "2013-01-02 02:03:00", "2013-01-02 02:06:00", 
           "2013-01-02 02:07:00", "2013-01-02 02:10:00", "2013-01-02 02:13:00", 
           "2013-01-02 02:16:00", "2013-01-02 02:19:00"],
     "C": np.random.randn(16),
    })

问题分析

你尝试使用SQL语法实现,但原生Pandas不支持这种写法,需要使用Pandas内置的时间处理函数来完成需求。

解决方案

步骤1:转换时间列类型

先将B列从字符串转换为datetime类型,这是时间聚合的前提:

df1['B'] = pd.to_datetime(df1['B'])

步骤2:按10分钟间隔重采样计算均值

使用resample方法按10分钟间隔分组,并计算C列的均值。为了匹配预期输出的时间格式(显示区间结束时间),用ceil调整索引:

# 设置B列为索引
df1 = df1.set_index('B')
# 按10分钟重采样,计算均值,调整索引为区间结束时间
result = df1['C'].resample('10T').mean()
result.index = result.index.ceil('10T')
# 重置索引并命名列
result = result.reset_index(name='C_mean')

完整代码

import pandas as pd
import numpy as np

df1 = pd.DataFrame(
    {"A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo",
          "foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
     "B": ["2013-01-01 01:01:00", "2013-01-01 01:03:00", "2013-01-01 01:06:00", 
           "2013-01-01 01:07:00", "2013-01-01 01:10:00", "2013-01-01 01:13:00", 
           "2013-01-01 01:16:00", "2013-01-01 01:19:00", 
           "2013-01-02 02:01:00", "2013-01-02 02:03:00", "2013-01-02 02:06:00", 
           "2013-01-02 02:07:00", "2013-01-02 02:10:00", "2013-01-02 02:13:00", 
           "2013-01-02 02:16:00", "2013-01-02 02:19:00"],
     "C": np.random.randn(16),
    })

# 转换时间列
df1['B'] = pd.to_datetime(df1['B'])
# 重采样计算
df1 = df1.set_index('B')
result = df1['C'].resample('10T').mean()
result.index = result.index.ceil('10T')
result = result.reset_index(name='C_mean')

print(result)

预期输出示例

(注:实际均值由随机数生成,以下为格式示例)

B    C_mean
0 2013-01-01 01:10:00  0.123456
1 2013-01-01 01:20:00 -0.789012
2 2013-01-02 02:10:00  0.345678
3 2013-01-02 02:20:00 -0.901234

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:50:38