Я работаю над сложными вычислениями набора данных, которые требуют пересчета на основе суммы предыдущих строк. Я постараюсь сформулировать как можно лучше.
У меня есть набор данных 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