在PySpark中如何为DataFrame多列计算10%到90%的多段百分位数
解决方案
直接用pandas内置的quantile方法即可完成需求,该方法底层做了矢量运算优化,完全适配百万级数据量的计算场景,无需额外写循环逻辑,示例代码如下:
import pandas as pd # 这里替换为你自己的DataFrame变量 df = pd.read_csv("你的数据文件路径") # 或者其他方式生成的df # 定义要计算的10%~90%的百分位序列 calc_percentiles = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] # 计算所有数值列的指定百分位,转置后调整列名即可匹配要求的输出格式 result = df.quantile(calc_percentiles, numeric_only=True).T # 按要求重命名列 result.columns = [f"PERCENTILE_{int(p*100)}" for p in calc_percentiles] # 将列名转为单独的COL列 result = result.reset_index(names="COL") # 如果需要输出为你示例的竖线分隔格式,直接调用to_csv即可 print(result.to_csv(sep="|", index=False))
可选调整项
- 如果需要修改百分位的计算规则,可以给
quantile方法传入method参数,可选值包括:linear:默认线性插值算法lower:取小于等于百分位的最近值higher:取大于等于百分位的最近值nearest:取最接近百分位的数值midpoint:取上下两个边界的平均值
- 如果你的数据全为数值列,可以去掉
numeric_only=True参数。
内容的提问来源于stack exchange,提问作者Alf
相关产品推荐
相关产品推荐

