【问题标题】:Applying rolling function with second data frame使用第二个数据框应用滚动功能
【发布时间】: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])

我想做以下事情:

  1. 如果任何数字 df[0:3] 大于 check_df[0],则返回 1,否则返回 0
  2. 如果任何数字 df[1:4] 大于 check_df[1] 则返回 1 否则返回 0
  3. 等等……

可以通过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]进行比较,但我不知道如何在滚动函数中指定它.你能帮我解决这个问题吗?

【问题讨论】:

标签: python pandas


【解决方案1】:

IIUC,您可以使用 x 的第一个索引,例如 first_valid_index

def custom_fun(x: pd.DataFrame):
    return (x > float(check_df.iloc[x.first_valid_index()])).any()


res = df.rolling(3, min_periods=3).apply(custom_fun).shift(-2)

print(res)

输出

     0
0  0.0
1  1.0
2  0.0
3  1.0
4  1.0
5  0.0
6  1.0
7  NaN
8  NaN

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 2019-09-23
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    相关资源
    最近更新 更多