【问题标题】:Python how to create bins based on a fixed thresholdPython如何根据固定阈值创建垃圾箱
【发布时间】:2021-11-04 17:28:57
【问题描述】:

我有一个数据框,我想根据以下逻辑创建 bin: 分箱的阈值为 5。

  1. 第一个 bin (bin1) 从第一个标记 m1 开始。然后我们计算下一个标记 m2 的位置差,得到 Position(m2) - Position(m1) = 0.5-0 = 0.5。因为差值

  2. 我们继续相同的操作,直到与第一个标记的差异大于阈值。因此,由于Position(m6) - Position(m1) = 7,大于阈值,m6不属于bin1,成为bin2的第一个标记。我们重复相同的过程:Position(m7) - Position(m6) = 1.4,即

  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]})

【问题讨论】:

    标签: python pandas bin


    【解决方案1】:

    使用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
    

    【讨论】:

    • 非常感谢 Corralien,你成功了。
    猜你喜欢
    • 1970-01-01
    • 2019-06-24
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多