Python пересчитывает совокупные значения каждой строки многомерного набора данных без цикла? ⇐ Python

Программы на Python
Anonymous
Python пересчитывает совокупные значения каждой строки многомерного набора данных без цикла?

Сообщение Anonymous »

Я работаю над сложными вычислениями набора данных, которые требуют пересчета на основе суммы предыдущих строк. Я постараюсь сформулировать как можно лучше.
У меня есть набор данных n x n, мне нужно создать новый набор данных n x n, который берет значение из первой записи и вычитает совокупную сумму. этой строки до этого значения, а затем умножается на значение из другой серии 1 x n.
Например:
n x n Набор данных:
< div class="s-table-container">


i
0
1
2
3
< th>4
5
6




0
0
0
0
0
0
0
< td>0


1
0
0
0
0
0
0
0


2
< td>200
0
0
0
0
0
0


3
200
150
0
0
0
0
0


4
200
150
125< /td>
0
0
0
0


5
200
150
125
100
0
0
0


6
200
150
125
100
750
0



Серия 1 x n:


i
0




0
.000


1
.001


2
.002


3
. 003


4
.004
< /tr>

5
.005


6
.006


< /div>
Результат:


i
0
1
2
3
4
5




0
0
0
0
0
0
0


1
< td>0
0
0
< td>0
0
0


2
.4 [(200 - сумма 0) * .002]
0
0
0
0
0


3
.5988 [ (200 – сумма .4) * .003]
.45 [(150 – сумма 0) * .003]
0
0
0
0


4
.7960 [(200 - сумма (.4, .5988)) * .004]
.5982 [(150 - сумма .45) * .004]
.50
0
0
0


5
.9910 [(200 - сумма (.4, .5988 , .7960)) * .005]
.7447 [(150 - сумма .45, .5982) * .005]
.6225
.50
0
0


6
1,1832 [(200 - сумма (.4, .5988, .7960, .9910)) * .006]
.8892 [(150 - сумма .45, .5982, .7447) * .006]
.74326
. 5970
.450
0


Я хорошо умею использовать pandas или numpy для получения этих данных. В настоящее время я перебираю каждую строку и столбец, и расчет занимает очень много времени.
Любая помощь будет очень признательна.
Это код, который работает с использованием циклов.
import numpy as np
import pandas as pd

df_a =pd.DataFrame([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[200,0,0,0,0,0,0],[200,150,0,0,0,0,0],[200,150,125,0,0,0,0],[200,150,125,100,0,0,0],[200,150,125,100,75,0,0]]).astype(float)

df_series = pd.Series([0.0,.001, .002, .003, .004, .005, .006])
df_b = pd.DataFrame(np.arange(49).reshape(7,7)).astype(float)

for i in range(df_a.shape[0]): #iterate over rows
for j in range(df_a.shape[1]): #iterate over columns
df_a_val = df_a.iloc[i, j] #source dataset value
ser_val = df_series.iloc #value of series at row
df_b_prev = df_b.iloc[:i,j] #get series of previous values
df_b_sum = df_b_prev.sum() #sum previous values

df_b.at[i, j] = (df_a_val-df_b_sum)*(ser_val) #cell based calculation and set value
print("(df_a_val: {} - df_b_sum: {}) * ser_val : {} = {}".format(df_a_val, df_b_sum, ser_val, df_b.at[i, j]))
print(df_series)
print(df_b)


Подробнее здесь: https://stackoverflow.com/questions/790 ... ata-set-wi

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