首页 > 解决方案 > 为什么不能在熊猫的 for 循环中使用 loc(index+1,'col name')?

问题描述

我想计算python中行之间的差异。我知道我可以使用 diff() 来做到这一点。但我想尝试使用“for循环”。我尝试以下代码,但出现错误“KeyError:2” if pdf.loc[i+1,'A'] != pdf.loc[i,'A']:

如果我想做以下计算,我该怎么做,请帮忙。

打印(loc[2,'A'] * loc[1,'A'] + 3)

打印(loc[3,'A'] * loc[2,'A'] + 3)

打印(loc[4,'A'] * loc[3,'A'] + 3)

...

打印(loc[i,'A'] * loc[i-1,'A'] + 3)

显示“KeyError:2”错误的代码

for i, dura in pdf.iterrows():

     if i < pdf.shape[0]:
         if pdf.loc[i+1,'A'] != pdf.loc[i,'A']:
            print("a")
         else:
            print("b")
     else:
         print("finished")

标签: pythonpandasdatabricks

解决方案


iterrows()是遍历 pandas 数据框的最慢方法之一。改为使用itertuples()(还有其他更快的选项)

for row in df.itertuples():
    if row.Index < df.shape[0]-1:
        if df.at[row.Index+1,'A']!= row.A:
            print("a")
        else:
            print("b")
     else:
         print("finished")

推荐阅读