如何用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
相关产品推荐
相关产品推荐

