滚动应用基于条件的lambda函数



我有一个数据帧,其中包含18个产品(列(的标准化(到100(返回。我想应用一个lambda函数,它将下一行乘以上一行。

我可以做:

df= df.rolling(2).apply(lambda x: (x[0]*x[1]),raw=True)

但是我的一些列在第1行没有值(它们在第4行开始运行(。所以我需要:

  1. 有一个lambda函数,它只从第4行开始,但适用于整个df。我可以手动创建前4行。

  2. 由于我的值是100;活的";只有当值不等于100时,我才能应用lambda函数。

我都试过了:

1.

df.iloc[3:,:] = df.iloc[3:,:].rolling(2).apply(lambda x: (x[0]*x[1]),raw=True)
df= df.rolling(2).apply(lambda x: (x[0]*x[1]) if x[0] != 100 else x,raw=True)

但两者都遭遇了彻底的失败。

欢迎任何建议-我花了几个小时浏览网站,还没有找到任何适合这种情况的结果。

因此,鉴于缺乏响应,我提出了一个解决方案,将df拆分为两部分,并将其重新附加在一起。

我的lambda函数也是垃圾,我需要这样的东西:

df2 = df.copy()
for i in range(df2.index.size):
if not i:
continue
df2.iloc[i] = (df2.iloc[i - 1] * (df.iloc[i])) 
df2

实现我追求的目标。

最新更新