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

如何在Pandas中获取滚动最小值对应的类索引列值?

滚动窗口最小值对应索引列的实现方案

问题描述

给定包含ix(类索引列)和val列的DataFrame,需要计算val列滚动窗口(窗口大小为3)最小值对应的ix值,得到目标列ix_min。

示例数据

import pandas as pd
import numpy as np

d = pd.DataFrame.from_dict({'ix':[0,1,2,3,4,5], 'val': [1,-2,5,4,9,6]})

方法1:使用rolling.apply实现(直观易读)

通过rolling.apply遍历每个滚动窗口,找到窗口内val最小值对应的原索引,再提取对应的ix值:

def get_ix_min(window):
    # 获取窗口内val最小值的原索引,返回对应的ix值
    min_row_idx = window.idxmin()
    return d.loc[min_row_idx, 'ix']

# 应用滚动窗口计算,raw=False确保window是带原索引的Series
d['ix_min'] = d['val'].rolling(3).apply(get_ix_min, raw=False)

print(d)

输出结果:

ix  val  ix_min
0   0    1     NaN
1   1   -2     NaN
2   2    5     1.0
3   3    4     1.0
4   4    9     3.0
5   5    6     3.0

方法2:向量化实现(高效适用于大数据集)

当数据量较大时,apply的遍历效率较低,可采用向量化滑动窗口操作提升性能:

window_size = 3

# 生成所有滚动窗口的索引数组
windows = np.lib.stride_tricks.sliding_window_view(d.index, window_size)
# 找到每个窗口内val最小值的相对位置
min_pos_in_window = d['val'].values[windows].argmin(axis=1)
# 计算对应的ix值
ix_min_values = d['ix'].values[windows[np.arange(len(windows)), min_pos_in_window]]
# 给前window_size-1行填充NaN
d['ix_min'] = np.concatenate([[np.nan]*(window_size-1), ix_min_values])

print(d)

该方法利用numpy的滑动窗口视图实现向量化计算,避免了逐行遍历,性能远高于apply方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:43:31