如何遍历比较两个DataFrame的值并更新第三个DataFrame,解决循环报错问题
问题根因
- 错误1:
loc的第二个参数需要传入列名,你直接把iterrows()返回的整行Series对象row1、row2当作列名传入,pandas会尝试把Series里的所有值当作列名匹配,自然匹配不到,触发报错。 - 错误2:两层循环使用同一个
index变量名,内层循环的行索引会覆盖外层的行索引,无法正确匹配两个DataFrame的对应行位置。 - 错误3:完全没有必要使用嵌套循环遍历,pandas原生支持同规格DataFrame的向量化操作,执行效率远高于Python层循环。
最优解决方案
直接通过向量化比较一步生成结果,代码如下:
CountResult = (PORResult > p90Result).astype(int)
说明:两个同规格DataFrame直接用>比较会返回同样尺寸的布尔型DataFrame,PORResult值大于p90Result的位置为True,否则为False;使用astype(int)转换后,True会转为1,False转为0,完全匹配你的需求。
循环写法(仅作逻辑参考,不推荐生产使用)
如果你想要手动遍历理解逻辑,正确的循环写法应该遍历行索引和列名,示例如下:
for row_idx in PORResult.index: for col_name in PORResult.columns: if PORResult.loc[row_idx, col_name] > p90Result.loc[row_idx, col_name]: CountResult.at[row_idx, col_name] = 1
内容的提问来源于stack exchange,提问作者Megan Martin
相关产品推荐
相关产品推荐

