使用向量化时如何跳过前n行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用向量化时如何跳过前n行相关的知识,希望对你有一定的参考价值。
我正在使用矢量化对熊猫数据帧执行计算。我的计算使用了一定数量的先前行中的值。当前它返回错误:
IndexError: single positional indexer is out-of-bounds
由于前n行,因此前几行不足以执行计算。
我看到2个解决方案:
- 对于每一行,检查先前的行是否足够执行计算
- 在第n行之后开始计算
我不确定进行向量化时解决方案1是否可行。那解决方案2呢?有没有办法告诉系统仅从第n + 1行开始而不是从第0行(:)开始执行我的计算?
当前我的代码是:
df.iloc[:, 7] = df.iloc[:, 6] - df[df.My_TS <= df.iloc[:, 5]-Time_gap].iloc[len(df[df.My_TS <= df.iloc[:, 5]-Time_gap])-1].Total_run_sum
答案
您写了我的计算使用了一定数量的先前行中的值。恐怕这不是真的。
请注意,在每种情况下使用iloc时,请使用[:: n](n是数字)。
实际上是指:
- 计算涉及每一行(:),
- 在每种情况下,数据都是从不同的列读取的,用方括号之间的第二个参数(5,6或7)。
还不清楚,在该点发生错误。要对此进行调查,请按如下所示重写上面的片段:
def fn(row):
c6 = row.iloc[6]
c5 = row.[5] - Time_gap
wrk = df[row.My_TS <= c5] # Rows meeting the criterion
row2 = wrk.iloc[-1] # The last row from wrk
xx = row2.Total_run_sum
return c6 - xx
然后应用它:
df.col7 = df.apply(fn, axis=1)
可能会发生相同的错误,但至少您会知道它发生的确切位置。
也许wrk在某些情况下将是一个空的DataFrame,所以:
- 尝试获取最后一行将返回None或仅返回上面的错误。
- 即使之前没有发生错误,也尝试获取Total_run_sum不存在的行中的列应引起一些错误。
以上是关于使用向量化时如何跳过前n行的主要内容,如果未能解决你的问题,请参考以下文章