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

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

import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[1.1, 1.2, 1.3, 2.4, 2.5, 4.1]})
Output:
     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 intervals

如您所见,每个区间的大小等于 (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

所以这是我的预期结果。
Expected:
   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)]

关于python - 如何通过 Pandas 中的等效分区将连续值转换为离散值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53028081/

10-12 22:50