Python 如何根据固定阈值创建 bin
Python how to create bins based on a fixed threshold
我有一个数据框,我想根据以下逻辑创建 bin:
binning 的阈值是 5.
第一个 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.
我们继续相同的操作,直到与第一个标记的差异变得大于阈值。这样,因为Position(m6) - Position(m1) = 7,即> threshold,m6不属于bin1,成为bin2的第一个标记。我们重复相同的过程:Position(m7) - Position(m6) = 1.4 < threshold,因此 m7 属于 bin2。
我希望你明白了。
此示例的预期输出是
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
我有一个数据框,我想根据以下逻辑创建 bin: binning 的阈值是 5.
第一个 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.
我们继续相同的操作,直到与第一个标记的差异变得大于阈值。这样,因为Position(m6) - Position(m1) = 7,即> threshold,m6不属于bin1,成为bin2的第一个标记。我们重复相同的过程:Position(m7) - Position(m6) = 1.4 < threshold,因此 m7 属于 bin2。 我希望你明白了。
此示例的预期输出是
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