[英]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.