Эффективный способ вставки похожих строк (с изменением только одного столбца) сразу после каждой строки в Numpy или PandPython

Программы на Python
Ответить
Anonymous
 Эффективный способ вставки похожих строк (с изменением только одного столбца) сразу после каждой строки в Numpy или Pand

Сообщение Anonymous »

Предположим, у меня есть фрейм данных Pandas с 4 строками и 5 столбцами. Для простоты я преобразую его в массив Numpy, который выглядит так:

Код: Выделить всё

import numpy as np

A = np.array([[23, 43, 23, 110, 5],
[83, 32, 12, 123, 4],
[58, 41, 59, 189, 1],
[93, 77, 22, 170, 3]])
Для каждой строки я хочу вставить несколько похожих строк сразу после строки, при этом только столбец 4 каждый раз будет уменьшаться на 1 до 0. Ожидаемый результат должен выглядеть следующим образом:

Код: Выделить всё

np.array([[23, 43, 23, 110, 5],
[23, 43, 23, 110, 4],
[23, 43, 23, 110, 3],
[23, 43, 23, 110, 2],
[23, 43, 23, 110, 1],
[23, 43, 23, 110, 0],

[83, 32, 12, 123, 4],
[83, 32, 12, 123, 3],
[83, 32, 12, 123, 2],
[83, 32, 12, 123, 1],
[83, 32, 12, 123, 0],

[58, 41, 59, 189, 1],
[58, 41, 59, 189, 0],

[93, 77, 22, 170, 3],
[93, 77, 22, 170, 2],
[93, 77, 22, 170, 1],
[93, 77, 22, 170, 0]])
Ниже приведен код, который я придумал:

Код: Выделить всё

new_rows = []
for i, row in enumerate(A):
new = A[i, 4] - 1
while new >= 0:
new_row = row.copy()
new_row[4] = new
new_rows.append(new_row)
new -= 1
new_A = np.vstack([A, np.array(new_rows)])
print(new_A)
Вывод

Код: Выделить всё

[[ 23  43  23 110   5]
[ 83  32  12 123   4]
[ 58  41  59 189   1]
[ 93  77  22 170   3]
[ 23  43  23 110   4]
[ 23  43  23 110   3]
[ 23  43  23 110   2]
[ 23  43  23 110   1]
[ 23  43  23 110   0]
[ 83  32  12 123   3]
[ 83  32  12 123   2]
[ 83  32  12 123   1]
[ 83  32  12 123   0]
[ 58  41  59 189   0]
[ 93  77  22 170   2]
[ 93  77  22 170   1]
[ 93  77  22 170   0]]
Очевидно, что код неэффективен, поскольку он не использует векторизацию Numpy. На самом деле у меня более 4000 исходных строк, поэтому ускорение определенно необходимо. Более того, я не могу вставлять новые строки сразу после каждой строки. Есть ли какой-нибудь эффективный способ сделать это в Numpy или Pandas?

Подробнее здесь: https://stackoverflow.com/questions/700 ... ight-after
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»