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

如何用pandas的.quantile函数为DataFrame添加多列分位数列

按分组快速添加多列分位数的简便方法

嘿,这问题我太熟了!要实现你说的按第一列分组,给每个分组生成对应多个分位数的列,用pandas的groupby+quantile组合就能一步到位,操作超简洁。我结合你的示例一步步拆解:

第一步:构造示例数据

先把你给出的无表头数据转成标准DataFrame(如果你的原始数据已经有列名,这步可以跳过):

import pandas as pd

# 对应你给出的原始数据:第一列是分组,第二列是标签,第三列是数值
df = pd.DataFrame([
    [1, 'A', 10],
    [1, 'B', 1],
    [2, 'A', 6],
    [2, 'C', 13],
    [3, 'D', 15],
    [3, 'G', 1]
], columns=['group', 'label', 'value'])

第二步:核心操作——分组计算多分位数

这一步是关键:用groupby按第一列(group)分组,对数值列(value)调用quantile,直接传入你需要的分位数列表(比如你要的两个分位数,这里以0.25和0.75为例,可按需修改),最后用unstack()把结果转成「每个分组一行,分位数为列」的格式:

# 定义你需要的分位数,可根据需求调整数值
target_quantiles = [0.25, 0.75]

# 分组计算分位数并转换格式
quantile_result = df.groupby('group')['value'].quantile(target_quantiles).unstack()

# 给分位数列重命名,更直观
quantile_result.columns = [f'Quantile {int(q*100)}' for q in target_quantiles]

第三步:调整格式(可选)

如果你不想让分组列作为索引,而是作为普通列,加个reset_index()就行:

quantile_result = quantile_result.reset_index()

最终结果

运行完上面的代码,你会得到完全符合需求的结果:

group  Quantile 25  Quantile 75
0      1          1.0         10.0
1      2          6.0         13.0
2      3          1.0         15.0

小提示

如果你的原始DataFrame没有列名(就是你给出的纯行数据),可以直接用位置索引来分组和选数值列:

# 无表头情况下的写法
quantile_result = df.groupby(df.iloc[:,0])[df.iloc[:,2]].quantile(target_quantiles).unstack()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:09:20