根据条件滚动应用 lambda 函数
Rolling apply lambda function based on condtion
我有一个数据框,其中包含 18 个产品(列)的标准化(至 100)returns。我想应用一个 lambda 函数,它将下一行乘以上一行。
我能做到:
df= df.rolling(2).apply(lambda x: (x[0]*x[1]),raw=True)
但是我的一些专栏在第 1 行没有值(它们在第 4 行上线)。所以我需要:
有一个仅从第 4 行开始但适用于整个 df 的 lambda 函数。我可以手动创建前 4 行。
因为我的值是 100 直到“实时”,我可以让 lambda 函数仅在值不等于 100 时应用。
我都试过了:
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
真正实现我所追求的目标。
我有一个数据框,其中包含 18 个产品(列)的标准化(至 100)returns。我想应用一个 lambda 函数,它将下一行乘以上一行。
我能做到:
df= df.rolling(2).apply(lambda x: (x[0]*x[1]),raw=True)
但是我的一些专栏在第 1 行没有值(它们在第 4 行上线)。所以我需要:
有一个仅从第 4 行开始但适用于整个 df 的 lambda 函数。我可以手动创建前 4 行。
因为我的值是 100 直到“实时”,我可以让 lambda 函数仅在值不等于 100 时应用。
我都试过了:
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
真正实现我所追求的目标。