Python 如何根据固定阈值创建 bin

Python how to create bins based on a fixed threshold

我有一个数据框,我想根据以下逻辑创建 bin: binning 的阈值是 5.

  1. 第一个 bin (bin1) 从第一个标记 m1 开始。然后我们计算与下一个标记 m2 的位置差,得到 Position(m2) - Position(m1) = 0.5-0 = 0.5。因为差值 < 阈值,所以 m2 属于 bin1。然后我们移动到下一个标记 m3。我们重复这个过程 Position(m3) - Position(m1) = 0.6,因为 0.6 < threshold m3 属于 bin1.

  2. 我们继续相同的操作,直到与第一个标记的差异变得大于阈值。这样,因为Position(m6) - Position(m1) = 7,即> threshold,m6不属于bin1,成为bin2的第一个标记。我们重复相同的过程:Position(m7) - Position(m6) = 1.4 < threshold,因此 m7 属于 bin2。 我希望你明白了。

  3. 此示例的预期输出是

    bin1 = ['m1','m2','m3','m4','m5'] bin2 = ['m6','m7'] bin3 = ['m8','m9','m10']

关于binning的问题很多,答案参考qcut和cut。但我不确定它们是否适用于我的案例,或者我不确定如何将其应用到我的案例中。 预先感谢您的宝贵时间。

df = pd.DataFrame({'Marker': ['m1','m2','m3','m4','m5','m6','m7','m8','m9','m10'],
                  'Position': [0,0.5,0.6,2,5,7,8.4,15,16,17]})

使用floordiv:

df['Cluster'] = df['Position'].floordiv(5).astype(int).factorize()[0] + 1

输出:

>>> df
  Marker  Position  Cluster
0     m1       0.0        1
1     m2       0.5        1
2     m3       0.6        1
3     m4       2.0        1
4     m5       5.0        2
5     m6       7.0        2
6     m7       8.4        2
7     m8      15.0        3
8     m9      16.0        3
9    m10      17.0        3