Pandas计算多列滚动n行区间内全局最大差值实现方法
实现方案
你可以通过pandas内置的滚动统计函数实现需求,相比自定义apply计算效率更高,代码如下:
import pandas as pd # 定义滚动窗口大小 n = 10 # 筛选所有数值类型的列,自动排除时间等非数值字段 num_cols = df.select_dtypes(include='number').columns # 计算每个滚动窗口内所有数值的全局最大值,min_periods保证窗口数据足量才计算 roll_global_max = df[num_cols].rolling(window=n, min_periods=n).max().max(axis=1) # 计算每个滚动窗口内所有数值的全局最小值 roll_global_min = df[num_cols].rolling(window=n, min_periods=n).min().min(axis=1) # 差值写入新列 df['Diff'] = roll_global_max - roll_global_min
逻辑说明
- 先对每列单独做滚动窗口取最大值,再对每行的多列最大值取最大值,得到当前窗口所有数值的全局最大值
- 同理计算当前窗口所有数值的全局最小值,二者相减即为需要的差值
- 前n行因窗口数据不足/存在缺失值,会自动填充为
NaN,和你给出的预期输出完全匹配
内容的提问来源于stack exchange,提问作者JeppeBay
相关产品推荐
相关产品推荐

