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

Python中基于分钟维度的Pandas滚动求和实现(非GroupBy方式)

使用rolling方法实现分钟维度的累计求和

看了你的需求,想要不用groupby,纯靠rolling方法来计算每个分钟内X列的累计和对吧?我给你整理了一个可行的方案,一步步来:

首先,先把你的示例数据转换成可运行的DataFrame:

import pandas as pd

# 构造示例数据
data = {
    'dateTime': ['2017-09-19 02:00:04']*5 + ['2017-09-19 02:00:22']*2,
    '1min': ['2017-09-19 02:00:00']*7,
    'hour': [2]*7,
    'minute': [0]*7,
    'X': [93, 1, 1, 0, 0, 1, 1],
    'EXPECTED Rolling_X': [93, 94, 95, 95, 95, 96, 97]
}

df = pd.DataFrame(data)
# 转换为时间类型
df['dateTime'] = pd.to_datetime(df['dateTime'])
df['1min'] = pd.to_datetime(df['1min'])
# 确保数据按时间排序(这一步很重要,保证同分钟的行连续)
df = df.sort_values('dateTime').reset_index(drop=True)

接下来是核心的rolling实现步骤:

# 标记每一行是否是新一分钟的起始行
df['new_minute'] = df['1min'].ne(df['1min'].shift()).astype(int)

# 使用rolling窗口计算同分钟内的累计和
df['Rolling_X'] = df.rolling(window=len(df), min_periods=1).apply(
    lambda win: win[win['new_minute'].cumsum() == win['new_minute'].cumsum().iloc[-1]]['X'].sum(),
    raw=False
)

# 验证结果
print(df[['X', 'EXPECTED Rolling_X', 'Rolling_X']])

代码解释:

  1. 排序与标记新分钟:首先确保数据按时间排序,这样同一分钟的记录是连续的。然后用new_minute列标记当前行是否属于新的一分钟(和上一行的分钟时间不同则标记为1)。
  2. rolling窗口计算:我们用一个覆盖从第一行到当前行的滚动窗口,在apply函数里,通过new_minute的累计和来筛选出当前分钟内的所有行,然后对这些行的X值求和,就得到了你要的分钟维度累计和。

运行后你会看到Rolling_X列和你预期的EXPECTED Rolling_X完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:45:08