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

Pandas按1秒间隔分组求最值与首尾值遇索引错误的技术咨询

解决方案

一、修复resample索引错误

resample要求DataFrame的索引为datetime类型,先处理TIMESTAMP列:

import pandas as pd

# 读取CSV后转换时间列并设为索引
df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP'])
df = df.set_index('TIMESTAMP')

# 对PRICE列按1秒分组聚合
result = df['PRICE'].resample('1S').agg(['min', 'max', 'first', 'last'])
# 重命名列名更直观
result.columns = ['low', 'high', 'open', 'close']

如果之前未指定PRICE列直接聚合,会对所有列操作,容易引发多级列或索引异常,指定目标列即可避免。

二、给原DataFrame添加统计列

方法1:用transform直接生成

# 确保索引是datetime类型
df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP'])
df = df.set_index('TIMESTAMP')

# 生成对应分组的统计值并匹配到每一行
df['low'] = df['PRICE'].resample('1S').transform('min')
df['high'] = df['PRICE'].resample('1S').transform('max')
df['open'] = df['PRICE'].resample('1S').transform('first')
df['close'] = df['PRICE'].resample('1S').transform('last')

方法2:分组后合并回原表

df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP'])
# 生成分组统计结果并重置索引
grouped_stats = df['PRICE'].resample('1S', on='TIMESTAMP').agg(['min','max','first','last']).reset_index()
grouped_stats.columns = ['time_bin', 'low', 'high', 'open', 'close']

# 给原数据添加时间分组标记(取整到秒)
df['time_bin'] = df['TIMESTAMP'].dt.floor('1S')
# 合并统计列
df = df.merge(grouped_stats, on='time_bin', how='left')

三、用自定义函数实现需求

可以通过groupby+Grouper配合自定义函数完成:

df['TIMESTAMP'] = pd.to_datetime(df['TIMESTAMP'])

# 自定义聚合逻辑
def calc_bar(group):
    price = group['PRICE']
    return pd.Series({
        'low': price.min(),
        'high': price.max(),
        'open': price.iloc[0],
        'close': price.iloc[-1]
    })

# 按1秒间隔分组并应用函数
result = df.groupby(pd.Grouper(key='TIMESTAMP', freq='1S')).apply(calc_bar).dropna()

dropna()用于过滤无数据的时间区间,不需要可直接移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:05:25