Настройка :
a = np.array([4, 2, 7, 8])
v = df.Group.values
dct = {}
Вариант 1
Использование индексации numpy
. (Это решение предполагает диапазон ваших групп от 0-N
:
dct['numpy_indexing'] = a[v]
Вариант 2
Использование np.repeat
. (Это решение предполагает, что ваши группы не чересстрочные):
dct['numpy_repeat'] = np.repeat(a, np.bincount(v))
Опция 3
Использование map
. Этот подход будет медленнее, чем другие, но он немного более гибок, поскольку допускает чересстрочные и нелинейные группы:
d = dict(zip(np.unique(v), a))
dct['pandas_map'] = df.Group.map(d)
выход
df.assign(**dct)
ID Group numpy_indexing numpy_repeat pandas_map
0 0 0 4 4 4
1 1 0 4 4 4
2 2 1 2 2 2
3 3 1 2 2 2
4 4 1 2 2 2
5 5 2 7 7 7
6 6 2 7 7 7
7 7 3 8 8 8