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

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

Сообщение Anonymous »

Скажем, у меня есть пандас DataFrame с 4 строками и 5 столбцами. Для простоты я преобразую его в массив Numpy, который выглядит так: < /p>

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

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]])
< /code>
Ниже приведен код, который я предложил: < /p>
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)
< /code>
output < /p>
[[ 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]]
< /code>
Очевидно, что код не является эффективным, поскольку он не использует никакой векторизации Numpy. В действительности у меня более 4000 оригинальных строк, поэтому определенно необходимо ускорение. Более того, я не могу вставить новые ряды сразу после каждой строки. Есть ли эффективный способ сделать это в Numpy или Pandas?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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