Pandas的循环速度更快



我需要更快地在panda中进行循环。这是一个时间序列。下面的代码运行得很好,但对于大量df来说速度较慢。

它遍历df,在列a的每个第一个值0"zero"(它只需要是序列的第一个零;df有许多0序列(计算列a的初始值0"零"前后一个周期的列B值的delta(绝对值(。然后,它将结果存储在一个名为"Delta"的新df中

我打赌我可以用loc做点什么。但我不知道怎么做。

deltas=[]
indexes = []
i=0
for idx, row in df.iterrows():
if df.A[i] == 0 and df.A[i-1] !=0:

deltas.append(abs(df.B.shift(periods=1)[i] - df.B.shift(periods=-1)[i]))
indexes.append(idx)

i+=1
s_delta = pd.Series(deltas, name="Delta", index = indexes)
df_delta = s_delta.to_frame()

使用assign函数处理系列中的df,而不是每行:

df = df.assign(
n = lambda x: x.B.shift(1),
p = lambda x: x.B.shift(-1),
s_delta= np.abs(x.n-x.p)
)

然后你可以使用np.where 修改它

最新更新