В настоящее время у меня есть кадр данных, как показано ниже:
Этот кадр данных имеет 1 миллион строк.Я хотел бы выполнить следующую операцию:
Скажите, для строки 0, b равен 6. Я хотел бы создать еще один столбец, c.
C для строки 0 вычисляется как среднеестроки (т.е. 8 строк на изображении выше), где b находится в диапазоне от 6-3 до 6 + 3 (здесь 3 - фиксированное число для всех строк).
В настоящее время я выполнил эту операцию с помощьюпреобразование столбца a и столбца b в числовые массивы, а затем цикл.Ниже я приложил код:
index = range(0,1000000)
columns = ['A','B']
data = np.array([np.random.randint(10, size=1000000),np.random.randint(10, size=1000000)]).T
df = pd.DataFrame(data, index=index, columns=columns)
values_b = df.B.values
values_a = df.A.values
sum_array = []
program_starts = time.time()
for i in range(df.shape[0]):
value_index = [values_b[i] - 3,values_b[i] + 3]
sum_array.append(np.sum(values_a[value_index]))
time_now = time.time()
print('time taken ',time_now- program_starts)
Этот код занимает около 8 секунд для запуска.
Как я могу сделать это быстрее?Я попытался распараллелить задачу, разделив массив на 0,1 миллиона строк, а затем вызвал цикл for для каждого 0,1 миллиона массивов.Но это занимает еще больше времени.Пожалуйста, любая помощь будет оценена.