Skip to main content
 首页 » 编程设计

python之如何通过 Pandas 中的等效分区将连续值转换为离散值

2025年05月04日11Free-Thinker

我想通过等效分区将数据框列的连续值转换为离散值。 例如,以下是我的输入。

我想将 a 列中的连续值分成 3 个区间。

输入:

import pandas as pd  
import numpy as np  
df = pd.DataFrame({'a':[1.1, 1.2, 1.3, 2.4, 2.5, 4.1]}) 

输出:

     a 
0  1.1 
1  1.2 
2  1.3 
3  2.4 
4  2.5 
5  4.1 

在a列中,最小值是1.1,最大值是4.1,我想把它分成3个区间。

如您所见,每个区间的大小等于 (4.1-1.1)/3 = 1.0。因此,我可以将 [1.1, 2.1) 区间内的所有值(大于或等于 1.1 且小于 2.1 )视为 0,[2.1, 3.1)区间内的所有值为1,[3.1)区间内的所有值, 4.1] 作为 2。

这是我的预期结果。

预期:

   a 
0  0 
1  0 
2  0 
3  1 
4  1 
5  2 

请您参考如下方法:

您可以使用 pd.cut参数 right = False 为:

pd.cut(df.a, bins=3, labels=np.arange(3), right=False) 
 
0    0 
1    0 
2    0 
3    1 
4    1 
5    2 
Name: a, dtype: category 
Categories (3, int64): [0 < 1 < 2] 

分箱是如何完成的:

pd.cut(df.a, bins=3, right=False) 
 
0      [1.1, 2.1) 
1      [1.1, 2.1) 
2      [1.1, 2.1) 
3      [2.1, 3.1) 
4      [2.1, 3.1) 
5    [3.1, 4.103) 
Name: a, dtype: category 
Categories (3, interval[float64]): [[1.1, 2.1) < [2.1, 3.1) < [3.1, 4.103)]