【发布时间】:2022-07-22 15:11:22
【问题描述】:
让我们取两个数据集:
import pandas as pd
import numpy as np
df = pd.DataFrame([1, 2, 3, 2, 5, 4, 3, 6, 7])
check_df = pd.DataFrame([3, 2, 5, 4, 3, 6, 4, 2, 1])
我想做以下事情:
- 如果任何数字
df[0:3]大于check_df[0],则返回 1,否则返回 0 - 如果任何数字
df[1:4]大于check_df[1]则返回 1 否则返回 0 - 等等……
可以通过rolling函数和自定义函数来完成:
def custom_fun(x: pd.DataFrame):
return (x > float(check_df.iloc[0])).any()
然后将其与apply 函数结合起来:
df.rolling(3, min_periods = 3).apply(custom_fun).shift(-2)
我的解决方案中的主要问题是我总是与check_df[0]进行比较,而在第i个滚动窗口中,我应该与check_df[i]进行比较,但我不知道如何在滚动函数中指定它.你能帮我解决这个问题吗?
【问题讨论】:
-
IIUC,这里应该已经解决了:stackoverflow.com/questions/73065778/…。您可以将
check_df[i]与df[i:i+3]的滚动窗口的最大值进行比较