如何在Python中划分列的quantile并确定Price所属quantile?
Python实现Price列分位数划分并生成分位数标签与边界
原始数据集
| High | Low | Price |
|---|---|---|
| 10 | 5 | 7 |
需求说明
对Price列进行四分位数划分,为每个Price值标注所属分位数(Q1-Q4),同时生成统一的分位数边界序列,最终得到指定格式的输出表。
实现代码
import pandas as pd # 构造目标测试数据 data = { 'High': [10, 10, 10, 10], 'Low': [5, 5, 5, 5], 'Price': [8, 9, 6, 6.5] } df = pd.DataFrame(data) # 计算从高到低排列的四分位数边界 quantiles = df['Price'].quantile([1, 0.75, 0.5, 0.25, 0]).tolist() # 转换为字符串格式 qtr_range_str = ', '.join(map(str, quantiles)) # 为Price值分配分位数标签(Q1对应最高区间,Q4对应最低) df['Qtr'] = pd.cut( df['Price'], bins=quantiles, labels=['Q1', 'Q2', 'Q3', 'Q4'], include_lowest=True ) # 添加统一的分位数边界列 df['Qtr_Ranges'] = qtr_range_str # 调整列顺序匹配期望输出 df = df[['High', 'Low', 'Price', 'Qtr', 'Qtr_Ranges']] # 输出结果 print(df)
代码说明
- 先构造包含目标测试数据的DataFrame
- 通过
quantile()计算四分位数,按[1, 0.75, 0.5, 0.25, 0]排序得到从高到低的边界,匹配示例输出的顺序 - 使用
pd.cut()将Price值映射到对应分位数区间,设置include_lowest=True确保最小值被正确划分 - 为所有行添加统一的分位数边界字符串列
- 调整列顺序与期望输出对齐
输出结果
| High | Low | Price | Qtr | Qtr_Ranges |
|---|---|---|---|---|
| 10 | 5 | 8 | Q3 | 10, 8.75, 7.5, 6.25, 5 |
| 10 | 5 | 9 | Q1 | 10, 8.75, 7.5, 6.25, 5 |
| 10 | 5 | 6 | Q4 | 10, 8.75, 7.5, 6.25, 5 |
| 10 | 5 | 6.5 | Q3 | 10, 8.75, 7.5, 6.25, 5 |
代码格式问题解决
若发布时提示“未正确格式化为代码块”,需确保:
- 代码块前后用三个独立的反引号(```)包裹,且反引号单独占一行
- 可在反引号后指定代码语言(如
python),提升可读性 - 代码内部不要混入Markdown格式标记,保持纯代码内容
内容的提问来源于stack exchange,提问作者Divyansh Kumar Singh
相关产品推荐
相关产品推荐

