Индексные операции с данными не работают так, как хотелось - PullRequest
1 голос
/ 15 апреля 2020

Мой текущий код

M = pd.DataFrame(index=range(10), columns=range(6))

for i  in M.index:
    M.loc[i,0:2] = 1550

for i  in M.index:
    M.loc[i,3:6] = 300

#########################################################################
FOa = 0.00123
i = 0
j = 1

while i < 10:
    while j < 3:
        M.iloc[i,j] = (1+2*FOa)*M.iloc[i+1,j] - FOa*(M.iloc[i+1,j-1] + M.iloc[i+1,j+1])
        j = j +1

    i = i + 1

Выходные данные выглядят следующим образом:

      0     1        2    3    4    5
0  1550  1550  1551.55  300  300  300
1  1550  1550     1550  300  300  300
2  1550  1550     1550  300  300  300
3  1550  1550     1550  300  300  300
4  1550  1550     1550  300  300  300
5  1550  1550     1550  300  300  300
6  1550  1550     1550  300  300  300
7  1550  1550     1550  300  300  300
8  1550  1550     1550  300  300  300
9  1550  1550     1550  300  300  300

Мой вопрос: почему изменяется только первая строка столбца 2, а не все? их?

1 Ответ

0 голосов
/ 15 апреля 2020

Поскольку значение j присваивается только за пределами двух циклов, следовательно, после первой итерации внутреннего l oop j равно 3, и оно не входит в циклы для последующих строк.

Проблема может быть исправлена ​​следующим образом:

while i < 10:
    j = 1
    while j < 3:
        M.iloc[i,j] = (1+2*FOa)*M.iloc[i+1,j] - FOa*(M.iloc[i+1,j-1] + M.iloc[i+1,j+1])
        j = j +1

    i = i + 1

Но поскольку вы ссылаетесь на строку ниже в M.iloc[i+i,j], вы, вероятно, захотите выполнить итерацию до последней строки и указать значение последний ряд после l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...