更快地进入熊猫圈

时间:2020-11-02 17:21:33

标签: python pandas

我需要更快地在熊猫中循环。这是一个时间序列。 下面的代码效果很好,但是对于大规模df来说速度很慢。

迭代一个df并在A列的每个第一个值0'零'(它只需是一个系列的第一个零; df有许多0系列)计算B列的增量(绝对值)列A的初始值0“零”前后一个周期的值。 然后将结果存储在名为“ 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()

1 个答案:

答案 0 :(得分:1)

使用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

对其进行修改