首页 > 解决方案 > 数据框索引操作无法按预期工作

问题描述

我当前的代码

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 列的第一行被修改而不是全部被修改?

标签: pythonpandasdataframe

解决方案


因为值 toj仅在两个循环之外分配,因此在内部循环的第一次迭代之后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]您可能希望迭代直到最后一行,并指定循环后最后一行的值。


推荐阅读