Как упомянул @G Андерсон, cut
автоматически вычислит диапазоны бинов, если вы укажете количество бинов. Я бы на самом деле рекомендовал qcut
сверх cut
, поэтому диапазоны бинов основаны на квантилях.
Вот пример добавления столбца «bin» для каждого столбца данных:
import numpy as np
import pandas as pd
data = np.array(
[[1, 10.0, 1000.0],
[2, 20.0, 0.2],
[3, 30.0, 300.0],
[4, 40.0, 0.04],
[5, 50.0, 50.0],
[6, 60.0, 0.006],
[7, 70.0, 7.0],
[8, 80.0, 0.0008],
[9, 90.0, 9000000],
])
df = pd.DataFrame(data=data, columns=["id", "col1", "col2"])
for col in df.columns[1:]:
df[col+'_bin'] = pd.qcut(df[col], 5, ['Very_Low','Low','Medium','High','Very_High'])
Вывод:
id col1 col2 col1_bin col2_bin
0 1.0 10.0 1.00000e+03 Very_Low Very_High
1 2.0 20.0 2.00000e-01 Very_Low Low
2 3.0 30.0 3.00000e+02 Low High
3 4.0 40.0 4.00000e-02 Low Low
4 5.0 50.0 5.00000e+01 Medium High
5 6.0 60.0 6.00000e-03 High Very_Low
6 7.0 70.0 7.00000e+00 High Medium
7 8.0 80.0 8.00000e-04 Very_High Very_Low
8 9.0 90.0 9.00000e+06 Very_High Very_High