You need to enable JavaScript to run this app. Pandas expanding窗口apply计算多百分位值报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Pandas expanding窗口apply计算多百分位值报错如何解决?

解决pandas expanding窗口同时计算多个百分位的问题

报错原因

你原代码报错的核心原因是:np.nanpercentile传入多个百分位值组成的列表作为参数时,会返回一个一维数组,而pandas的expanding.apply()默认要求每个窗口的计算结果是单个标量,无法直接写入单列,因此会抛出维度不匹配的错误。

解决方法

方法一:单次计算全部百分位,合并回原表

仅需一次窗口遍历,计算效率更高,适合百分位数量多的场景,代码示例如下:

import numpy as np
import pandas as pd

a = np.random.rand(1000)
df = pd.DataFrame(a, columns=['Data'])
val = [25, 30]

# 计算所有百分位,将每个窗口返回的数组拆分为多列
perc_df = df['Data'].expanding(min_periods=1).apply(
    lambda x: np.nanpercentile(x, val, interpolation='nearest'),
    raw=True
).apply(pd.Series)
# 为新生成的百分位列命名
perc_df.columns = [f'{v}th_Perc' for v in val]

# 将百分位结果合并到原DataFrame
df = pd.concat([df, perc_df], axis=1)

方法二:遍历百分位逐个生成列

写法简单直观,适合百分位数量少的场景,代码示例如下:

import numpy as np
import pandas as pd

a = np.random.rand(1000)
df = pd.DataFrame(a, columns=['Data'])
val = [25, 30]

# 逐个计算每个百分位,生成对应列
for v in val:
    df[f'{v}th_Perc'] = df['Data'].expanding(min_periods=1).apply(
        lambda x: np.nanpercentile(x, v, interpolation='nearest'),
        raw=True
    )

注意:建议仅针对需要计算的单列(如示例中的df['Data'])执行expanding操作,避免对全表做无意义计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 21:06:01