我需要更快地在熊猫中循环。这是一个时间序列。 下面的代码效果很好,但是对于大规模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()
答案 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
对其进行修改