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

如何将Pandas DataFrame中的列转换为四分位数标签?

解决方法

你需要的是等宽区间划分(而非基于数据分布的统计四分位数),用pd.cut()方法就能直接实现,无需使用transform。具体操作步骤如下:

1. 构造原始DataFrame

先把你提供的数据转换成Pandas DataFrame:

import pandas as pd

data = {
    'columnA': [3,73,2,-2,4,8,23,13,2,0,1,2,7,2,2,5],
    'columnB': [-1,2,13,24,1,2,3,5,2,3,4,1,2,1,2,3]
}
df = pd.DataFrame(data)

2. 定义自定义四分区间边界

按照你给出的区间范围,设定边界列表:

bins = [-2, 16.75, 35.5, 54.25, 73]

pd.cut()默认采用左闭右开的区间规则,刚好匹配你定义的四分区间(比如第1四分位[-2,16.75]、第2四分位[16.75,35.5]等)。

3. 划分区间并映射为四分位数编号

用pd.cut()将columnA的值归入对应区间,再通过cat.codes获取区间索引,最后加1得到1-4的四分位数编号:

# 将columnA的值划入指定区间,得到分类类型数据
df['columnA'] = pd.cut(df['columnA'], bins=bins)
# 将分类区间转换为1-4的四分位数编号
df['columnA'] = df['columnA'].cat.codes + 1

4. 最终结果

执行后得到的DataFrame与你给出的示例完全一致:

columnA  columnB
0        1       -1
1        4        2
2        1       13
3        1       24
4        1        1
5        1        2
6        2        3
7        1        5
8        1        2
9        1        3
10       1        4
11       1        1
12       1        2
13       1        1
14       1        2
15       1        3

补充说明

  • 若不想覆盖原始columnA数据,可以新建一列存储结果:
df['columnA_quartile'] = pd.cut(df['columnA'], bins=bins).cat.codes + 1
  • 如果后续需要基于数据分布的统计四分位数(而非等宽区间),可以使用pd.qcut()方法,但你的需求是自定义等宽区间,pd.cut()是更合适的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:30:03