繁体   English   中英

如何使Pandas中的行操作更快? 目前,发布代码需要13个小时

[英]How do I make row operations in Pandas faster? Currently it takes 13 hours for the posted code

我有100,000行,大约500列以上。 我想计算前5行的加权平均值,并将该数据用于每一行。 例如,我有10行

第1行:5-未处理

第6行=第5行* 1 +第4行* 0.8 +第3行* 0.6 +第2行* 0.4 +第1行* 0.2

使用熊猫我已经解决了这个问题,但是整个数据集需要13-14个小时才能完成此操作。 我阅读了有关.apply函数的信息,但是当您访问前几行中的信息时,我不确定如何使用它。

for i in range(lengthAllData):      #Length = Total rows
  if i>=5:
    alldata.iloc[i,1:width] = (alldata.iloc[i-1,1:width]*1 + 
    alldata.iloc[i-2,1:width]*0.8 + alldata.iloc[i-3,1:width]*0.6 + 
    alldata.iloc[i-4,1:width]*0.4 + alldata.iloc[i-5,1:width]*0.2) / 
    wtavg
  else:
    pass

我想在几分钟内执行此代码。 我该怎么做?

使用iterrows()函数迭代行。 同样,与其每次都查找项目,不如将它们存储在列表中并根据需要删除。

您的代码看起来像这样-

  i = 0
  tmp = []
    for _,k in alldata.iterrows():
       if i <5:
          tmp.append(k) #Appending k will append the individual row as a series 
       else:
           tmp.append(Weighted average of last 5 elements of tmp)

在此tmp的末尾将包含您所需的数据,您可以将其转换为Series并根据需要添加到Dataframe中

通常,应避免将循环应用于数据框,尤其是对其行。 尝试将数据框下移:

newdata = df.shift(1) * 1   + df.shift(2) * 0.8 + df.shift(3) * 0.6\
        + df.shift(4) * 0.4 + df.shift(5) * 0.2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM