cut + get_dummies
Вот один из способов:
import numpy as np
import pandas as pd
a = np.array([0., 14., 29., 43., 58., 72., 86., 101., 115., 130., 144.])
b = np.array([10, 26, 36, 48, 64, 71, 91, 105, 123, 133, 141])
df = pd.DataFrame({'Values': b})
df['Range'] = pd.cut(df['Values'], a)
dummies = pd.get_dummies(df['Range'])
res = pd.concat([df, dummies], axis=1)
print(res)
Объяснение
pandas.cut
используются метки по умолчанию, относящиеся к диапазонам, если они не указаны. pandas.get_dummies
расширяет серию до формата «горячего кодирования». pandas.concat
позволяет присоединить исходный кадр данных к выводу из get_dummies
. - При желании вы можете установить
Values
в качестве индекса через res = res.set_index('Values')
.
Результат
print(res)
Values Range (0, 14] (14, 29] (29, 43] (43, 58] (58, 72] \
0 10 (0, 14] 1 0 0 0 0
1 26 (14, 29] 0 1 0 0 0
2 36 (29, 43] 0 0 1 0 0
3 48 (43, 58] 0 0 0 1 0
4 64 (58, 72] 0 0 0 0 1
5 71 (58, 72] 0 0 0 0 1
6 91 (86, 101] 0 0 0 0 0
7 105 (101, 115] 0 0 0 0 0
8 123 (115, 130] 0 0 0 0 0
9 133 (130, 144] 0 0 0 0 0
10 141 (130, 144] 0 0 0 0 0
(72, 86] (86, 101] (101, 115] (115, 130] (130, 144]
0 0 0 0 0 0
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 0 0 0 0 0
6 0 1 0 0 0
7 0 0 1 0 0
8 0 0 0 1 0
9 0 0 0 0 1
10 0 0 0 0 1