我已经构建了一个表示层次结构的数据框。现在我试图迭代地遍历这个数据帧(迭代虽然不好但我认为只适用于我的情况)根据我的程序计算更改数据帧的值并删除行。
对于前两次迭代,程序正确读取数据帧行。然而,在第三次迭代(总是)中,它正在读取我认为的旧值。
如果我还不够清楚,这里是ipython笔记本:Ipython Notebook
初始数据框:
c1 c2 c3 c4
19 21 20 14 0.718004
18 20 21 14 0.749271
17 19 18 17 0.724873
16 18 19 17 0.647143
15 17 16 11 0.348749
14 16 17 11 0.847751
13 15 14 9 0.597245
12 14 15 9 0.596115
11 13 12 8 0.549009
10 12 13 8 0.810719
9 11 10 7 0.328420
8 10 11 7 0.859816
7 9 8 6 0.449287
6 8 9 6 0.724799
5 7 6 4 0.320076
4 6 7 4 0.306391
3 5 4 2 0.809620
2 4 5 2 0.450804
1 3 2 1 0.771699
0 2 3 1 0.118202
有问题的代码:
computed_dataframe.sort_values(['c1'], ascending=0, inplace = True)
for index, row in computed_dataframe.iterrows():
print computed_dataframe
print row['c3']
if row['c3'] == 1:
break
select_final(row['c3'])
print computed_dataframe
功能定义
def select_final(check_label):
.....
.....
parent_frame = computed_dataframe[computed_dataframe['c1'] == check_label]
parent_score = get_parent_row_frame.iloc[0]['c4']
if avg > parent_score:
for i in child_index:
computed_dataframe.loc[i,'c2'] = parent_row_frame.iloc[0]['c3']
computed_dataframe = computed_dataframe[computed_dataframe.c1 != parent_frame.iloc[0]['c1']]
elif avg <= parent_score:
computed_dataframe = computed_dataframe[computed_dataframe.c3 != check_label]
return
迭代1:行['c3']指向14
第一次迭代产生的帧:
c1 c2 c3 c4
19 21 20 9 0.718004
18 20 21 9 0.749271
17 19 18 17 0.724873
16 18 19 17 0.647143
15 17 16 11 0.348749
14 16 17 11 0.847751
13 15 14 9 0.597245
# Deleted with c1 = 14
11 13 12 8 0.549009
10 12 13 8 0.810719
......
......
迭代2:读取索引18. row ['c3']指向9
第二次迭代产生的帧:
c1 c2 c3 c4
19 21 20 6 0.718004
18 20 21 6 0.749271
17 19 18 17 0.724873
16 18 19 17 0.647143
15 17 16 11 0.348749
.....
# Deleted row with c1 = 9
.........
迭代3:读取索引17. row ['c3']指向17
第3次迭代产生的帧:
c1 c2 c3 c4
19 21 20 6 0.718004
18 20 21 6 0.749271
17 19 18 11 0.724873
16 18 19 11 0.647143
#Deleted row with c1 17
14 16 17 11 0.8477
.....
.....
.........
迭代4:读取索引16. row ['c3']指向11.
然而,程序仍在以某种方式读取行['c3']为然后在执行函数时遇到错误,因为它在c1中找不到对应于17的任何匹配因此,我的计算结果是零误差除。我无法理解它仍在将c3读为17的位置。打印的数据框显示该索引处的更新值为11。
有人会帮我解决这个错误,并从弹出的地方出来吗?
答案 0 :(得分:0)
这是我的错。我正在更新我正在迭代的相同数据帧。