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

如何为时间序列每10个数据点应用自定义函数并生成10分钟间隔DataFrame

时间序列按10分钟间隔应用自定义函数的实现方案

需求说明

现有1分钟频率的时间序列数据,需按每10个数据点(即10分钟间隔)为一组,将每组以形状(10,)的数组传入自定义函数计算,最终将结果存入带10分钟间隔索引的DataFrame中。

实现方法

方法一:使用Pandas resample 方法

resample是Pandas处理时间序列分组的原生方法,能直接按时间间隔分组并应用自定义函数:

import pandas as pd
import numpy as np

# 生成原始1分钟间隔时间序列数据
df = pd.DataFrame(index=pd.date_range(freq='1T', start='2020-10-10', periods=12*24))
df['value'] = np.random.randint(1, 100, size=df.shape[0])

# 自定义计算函数
def func(arr, b, c):
    return np.mean(arr) * b - c

# 若原始数据总点数不是10的整数倍,先截断处理(可选)
truncated_len = len(df) // 10 * 10
df = df.iloc[:truncated_len]

# 按10分钟重采样,对每组数据应用自定义函数
result_df = df['value'].resample('10T').apply(lambda x: func(x.values, b=3, c=5))

# 转换为带列名的DataFrame
result_df = result_df.to_frame(name='calculated_value')

# 查看结果
print(result_df.head())

说明:

  • resample('10T')自动将1分钟数据按10分钟窗口分组,每组对应10个原始数据点
  • x.values提取每组的数值数组,形状为(10,),完全匹配自定义函数的输入要求
  • 结果DataFrame的索引为每个10分钟窗口的起始时间

方法二:使用Numpy数组拆分 + 手动构建索引

若偏好更底层的数组操作,可直接拆分原始数组后计算:

import pandas as pd
import numpy as np

# 生成原始数据
df = pd.DataFrame(index=pd.date_range(freq='1T', start='2020-10-10', periods=12*24))
df['value'] = np.random.randint(1, 100, size=df.shape[0])

# 自定义计算函数
def func(arr, b, c):
    return np.mean(arr) * b - c

# 截断数据到10的整数倍长度
truncated_len = len(df) // 10 * 10
df = df.iloc[:truncated_len]

# 将原始数值数组拆分为每10个一组的二维数组
grouped_arrays = df['value'].values.reshape(-1, 10)

# 遍历每组应用自定义函数
calculated_values = [func(arr, 3, 5) for arr in grouped_arrays]

# 构建10分钟间隔的索引(取每组第一个数据点的时间戳)
new_index = df.index[::10]

# 创建结果DataFrame
result_df = pd.DataFrame({'calculated_value': calculated_values}, index=new_index)

# 查看结果
print(result_df.head())

说明:

  • reshape(-1,10)将一维数值数组拆分为N行10列的二维数组,每行对应一组10个数据点
  • 索引通过取原始索引的第0、10、20...个元素生成,确保与10分钟间隔对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:00:24