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

获取Pandas DataFrame每行百分位数(含中位数)的最优方法

实现方案

向量化最优方案(性能最高)

直接基于numpy对数值列的二维数组做轴向百分位计算,全程无Python层循环,性能比逐行遍历高两个数量级左右:

import pandas as pd
import numpy as np

# 定义分位值与对应输出列名
q_values = [10, 20, 30, 40, 50, 60, 70, 80, 90]
stat_cols = ["10分位", "20分位", "30分位", "40分位", "中位数", "60分位", "70分位", "80分位", "90分位"]

# 提取val列矩阵按行计算分位数
val_arr = df.filter(regex=r"^val\d+$").values
stat_result = np.percentile(val_arr, q=q_values, axis=1).T

# 合并年份列得到最终结果
result = pd.concat([df[["year"]], pd.DataFrame(stat_result, columns=stat_cols)], axis=1)

pandas原生语法方案(可读性更高)

如果更偏好pandas原生API,可使用quantile方法沿行轴计算,性能略低于numpy实现,但远高于逐行遍历:

q_values = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
stat_cols = ["10分位", "20分位", "30分位", "40分位", "中位数", "60分位", "70分位", "80分位", "90分位"]

result = df[["year"]].join(
    df.filter(regex=r"^val\d+$")
      .quantile(q=q_values, axis=1)
      .T
      .set_axis(stat_cols, axis=1)
)

两种方案都完全避免了逐行遍历,也不会产生大量无效中间列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 14:36:00