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

如何在Pandas DataFrame中按行计算窗口大小为5的最大值?

按行计算固定窗口大小的最大值

针对你需要对大型DataFrame按行计算窗口大小为5的最大值的需求,这里提供两种高效的实现方法,以你给出的3行15列示例DataFrame为例:

方法一:利用Numpy数组重构(高效推荐)

通过将DataFrame转换为Numpy数组后重构形状,直接按窗口维度取最大值,适合处理大规模数据:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame()
df['a'] = [1, 0, 1]
df['b'] = [10,12,4]
df['c'] = [10, 0, 6]
df['d'] = [10,102,1]
df['aa'] = [-1, 10, 21]
df['bb'] = [10,12,31]
df['ac'] = [-1, 0, 41]
df['bv'] = [20,121,11]
df['a1'] = [3, 10, 1]
df['bx'] = [10,12,51]
df['ad'] = [6, 10, 1]
df['bn'] = [101,12,31]
df['aq'] = [2, 0, 1]
df['bp'] = [1,112,12]
df['ak'] = [23, 0, 1]

# 核心逻辑:重构数组形状后按窗口取最大值
result = pd.DataFrame(
    df.values.reshape(-1, len(df.columns)//5, 5).max(axis=2),
    columns=['v1', 'v2', 'v3']
)

print(result)

逻辑说明:

  1. df.values 获取DataFrame的底层Numpy数组,形状为(3,15)
  2. .reshape(-1, 3, 5) 将数组重构为(行数, 窗口数, 窗口大小),其中-1自动匹配原行数,3是15//5得到的窗口数量,5是窗口大小
  3. .max(axis=2) 沿着窗口内的列维度(第三个轴)计算最大值,得到形状为(3,3)的结果数组
  4. 转换为DataFrame并指定列名,得到预期输出

方法二:Pandas分组计算

通过对列索引进行分组,每5列分为一组,再计算每行的最大值:

import pandas as pd
import numpy as np

# 构造示例DataFrame(同上,省略重复代码)

# 按列索引每5个分组,计算每行最大值
result = df.groupby(np.arange(len(df.columns)) // 5, axis=1).max()
# 重命名列名
result.columns = [f'v{i+1}' for i in range(result.shape[1])]

print(result)

逻辑说明:

  1. np.arange(len(df.columns))//5 生成列分组标签:前5列标签为0,中间5列为1,最后5列为2
  2. groupby(..., axis=1) 指定按列方向分组
  3. .max() 对每个分组计算每行的最大值
  4. 最后重命名列名以匹配预期输出

两种方法都能得到你需要的结果,其中Numpy数组重构的方法在处理大型DataFrame时性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:20:27